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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM