如何通過Python將CSV檔案匯入MySQL資料庫?
阿新 • • 發佈:2021-01-18
CSV檔案匯入資料庫一般有兩種方法:
1、通過SQL的insert方法一條一條匯入,適合資料量小的CSV檔案,這裡不做贅述。
2、通過load data方法匯入,速度快,適合大資料檔案,也是本文的重點。
樣本CSV檔案如下:
總體工作分為3步:
1、用python連線mysql資料庫,可參考如何使用python連線資料庫?
2、基於CSV檔案表格欄位建立表
3、使用load data方法匯入CSV檔案內容
load data語法簡介:
LOAD DATA LOCAL INFILE 'csv_file_path' INTO TABLE table_name FIELDS TERMINATED BY ',' LINES TERMINATED BY '\\r\\n' IGNORE 1 LINES
csv_file_path 指檔案絕對路徑
table_name 指表名稱
FIELDS TERMINATED BY ',' 指以逗號分隔
LINES TERMINATED BY '\\r\\n' 指換行
IGNORE 1 LINES 指跳過第一行,因為第一行是表的欄位名
下面給出全部程式碼:
下面給出全部程式碼: #匯入pymysql方法 import pymysql #連線資料庫 config = {'host':'', 'port':3306, 'user':'evdata', 'passwd':'', 'charset':'utf8mb4', 'local_infile':1 } conn = pymysql.connect(**config) cur = conn.cursor() #load_csv函式,引數分別為csv檔案路徑,表名稱,資料庫名稱 def load_csv(csv_file_path,table_name,database='evdata'): #開啟csv檔案 file = open(csv_file_path, 'r',encoding='utf-8') #讀取csv檔案第一行欄位名,建立表 reader = file.readline() b = reader.split(',') colum = '' for a in b: colum = colum + a + ' varchar(255),' colum = colum[:-1] #編寫sql,create_sql負責建立表,data_sql負責匯入資料 create_sql = 'create table if not exists ' + table_name + ' ' + '(' + colum + ')' + ' DEFAULT CHARSET=utf8' data_sql = "LOAD DATA LOCAL INFILE '%s' INTO TABLE %s FIELDS TERMINATED BY ',' LINES TERMINATED BY '\\r\\n' IGNORE 1 LINES" % (csv_filename,table_name) #使用資料庫 cur.execute('use %s' % database) #設定編碼格式 cur.execute('SET NAMES utf8;') cur.execute('SET character_set_connection=utf8;') #執行create_sql,建立表 cur.execute(create_sql) #執行data_sql,匯入資料 cur.execute(data_sql) conn.commit() #關閉連線 conn.close() cur.close()
出現的問題:
我是用win10系統,程式碼執行時會出現以下錯誤
ERROR 1148 (42000): The used command is not allowed with this MySQL version.
原因是不支援命令 load data
解決方法:
需要更改下配置檔案
在mysql安裝目錄中找到my.ini配置檔案,複製以下內容到檔案中
[mysqld] #服務端配置
local-infle = 1
[mysql] #客戶端配置
local-infile = 1