python - LOAD DATA LOCAL INFILE批量导入数据到mysql

最近正好要学习TPC-DS, 需要用到批量导入数据。这里用到了mysql自带的LOAD DATA LOCAL INFILE来导入数据。

要用这个命令,必须在server端和client端设置

1.安装mysql,这里省略

2.用 mysql --local-infile=1 -u user1 -p 进入mysql命令行。这里 --local-infile=1 用来说明client连接可以用load data local infile.

3.依次执行以下mysql命令。这里 SET GLOBAL local_infile = 'ON'; 是在server端设置允许用load data local infile.

1 use huazhu
2 CREATE TABLE sites (name VARCHAR(255), url VARCHAR(255))
3 delete from sites;
4 SHOW GLOBAL VARIABLES LIKE 'local_infile';
5 SET GLOBAL local_infile = 'ON';
6 select * from sites;
7 INSERT INTO sites (name, url) VALUES ("RUNOOB", "https://www.runoob.com");
View Code

4.创建sites.dat file以备后用。注意字段之间的分割符是|。

Google|https://www.google.com
Github|https://www.github.com
Taobao|https://www.taobao.com
stackoverflow|https://www.stackoverflow.com/

5.执行mysql命令,批量从sites.dat文件中导入数据到数据库中的sites表.此命令中也指明了字段之间的分隔符。

LOAD DATA LOCAL INFILE 'sites.dat' INTO TABLE sites FIELDS TERMINATED BY '|';

贴上亲测执行成功的代码

 1 import pymysql
 2 mydb = pymysql.connect("ip","user", "password", "dbname",3306,local_infile=1)
 3 mydb.set_charset('utf8')
 4 
 5 mycursor = mydb.cursor()
 6 mycursor.execute("select table_name from information_schema.tables where table_schema='huazhu';")
 7 
 8 myresult = mycursor.fetchall()  # fetchall() 获取所有记录
 9 for x in myresult:
10     file_name="D:/Cipher/huazhu20201130/data/dat/"+x[0]+".dat"
11     sql="LOAD DATA LOCAL INFILE '"+file_name+"' INTO TABLE "+x[0]+" FIELDS TERMINATED BY '|';"
12     print(sql)
13     mycursor.execute(sql)
14     mydb.commit()  # 数据表内容有更新,必须使用到该语句
15     print(mycursor.rowcount, "记录插入成功。")
View Code

说明:

1. port 3306可以省略,当然缺省会去连接3306

2. 这里我写了绝对地址,我们可以考虑配置环境变量之后写相对地址。

posted @ 2020-12-01 14:53  panda4671  阅读(1265)  评论(0编辑  收藏  举报