python - LOAD DATA LOCAL INFILE批量匯入資料到mysql
阿新 • • 發佈:2020-12-01
最近正好要學習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. 這裡我寫了絕對地址,我們可以考慮配置環境變數之後寫相對地址。