欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mysql导入csv大数据

程序员文章站 2024-02-10 22:07:22
...

环境:

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的意思是:数据集的第一行是列名称,列名称在②中已经导入,所以这里不用再重复导入了.