mysql导入csv大数据
环境:
ubuntu18.10
python3.6
数据集来自kaggle:ieee-fraud-detection中的identity_test.csv
#########################################################################################3
①先csv的获取列名,代码如下:
import types
lists="TransactionID,id_01,id_02,id_03,id_04,id_05,id_06,id_07,id_08,id_09,id_10,id_11,id_12,id_13,id_14,id_15,id_16,id_17,id_18,id_19,id_20,id_21,id_22,id_23,id_24,id_25,id_26,id_27,id_28,id_29,id_30,id_31,id_32,id_33,id_34,id_35,id_36,id_37,id_38,DeviceType,DeviceInfo"
final_lists=[]
remain=lists
while True:
if "," in remain:#如果包含两个以上的列名
print("type(remain)=",type(remain))
print("remain=",len(remain))
print("remain=",remain)
result=remain.split(",",1)
item1=result[0]+" text,"
final_lists.append(item1)
remain=result[1]
else:
final_lists.append(remain+" text")#建表时最后一行的列名后是不需要逗号的
break
print("------------------------最终输出1---------------------------")
for item in final_lists:
print(item)
print("------------------------最终输出2---------------------------")
print(final_lists)
print("item[0]=",final_lists[0])
print("len(item)=",len(final_lists))
得到:
TransactionID text,
id_01 text,
id_02 text,
id_03 text,
id_04 text,
id_05 text,
id_06 text,
id_07 text,
id_08 text,
id_09 text,
id_10 text,
id_11 text,
id_12 text,
id_13 text,
id_14 text,
id_15 text,
id_16 text,
id_17 text,
id_18 text,
id_19 text,
id_20 text,
id_21 text,
id_22 text,
id_23 text,
id_24 text,
id_25 text,
id_26 text,
id_27 text,
id_28 text,
id_29 text,
id_30 text,
id_31 text,
id_32 text,
id_33 text,
id_34 text,
id_35 text,
id_36 text,
id_37 text,
id_38 text,
DeviceType text,
DeviceInfo text
②建表,把①中的输出填入②中的代码,代码如下:
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost","appleyuchi","appleyuchi","ieee-fraud-detection" )
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
# 使用预处理语句创建表
sql = """CREATE TABLE test_identity (
TransactionID text,
id_01 text,
id_02 text,
id_03 text,
id_04 text,
id_05 text,
id_06 text,
id_07 text,
id_08 text,
id_09 text,
id_10 text,
id_11 text,
id_12 text,
id_13 text,
id_14 text,
id_15 text,
id_16 text,
id_17 text,
id_18 text,
id_19 text,
id_20 text,
id_21 text,
id_22 text,
id_23 text,
id_24 text,
id_25 text,
id_26 text,
id_27 text,
id_28 text,
id_29 text,
id_30 text,
id_31 text,
id_32 text,
id_33 text,
id_34 text,
id_35 text,
id_36 text,
id_37 text,
id_38 text,
DeviceType text,
DeviceInfo text
)"""
cursor.execute(sql)
print("CREATE TABLE OK")
# 关闭数据库连接
③建立table完成后,登录mysql,注意必须先指定数据库才行,如下:
mysql> use ieee-fraud-detection;
mysql> show variables like '%secure%';
+--------------------------+-----------------------+
| Variable_name | Value |
+--------------------------+-----------------------+
| require_secure_transport | OFF |
| secure_auth | ON |
| secure_file_priv | /var/lib/mysql-files/ |
+--------------------------+-----------------------+
mysql> load data infile '/var/lib/mysql-files/test_identity.csv' into table test_identity fields terminated by ',' LINES TERMINATED BY '\n' IGNORE 1 LINES
Query OK, 141907 rows affected (4.59 sec)
Records: 141907 Deleted: 0 Skipped: 0 Warnings: 0
解释下上面的secure是因为mysql只接受在安全路径下导入数据.
上面ignore的意思是:数据集的第一行是列名称,列名称在②中已经导入,所以这里不用再重复导入了.