1. 程式人生 > 實用技巧 >python - LOAD DATA LOCAL INFILE批量匯入資料到mysql

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. 這裡我寫了絕對地址,我們可以考慮配置環境變數之後寫相對地址。