如何經過Python將CSV文件導入MySQL數據庫?

CSV文件導入數據庫通常有兩種方法:python

一、經過SQL的insert方法一條一條導入,適合數據量小的CSV文件,這裏不作贅述。mysql

2、經過load data方法導入,速度快,適合大數據文件,也是本文的重點。sql


樣本CSV文件以下:數據庫

整體工做分爲3步:微信

一、用python鏈接mysql數據庫,可參考如何使用python鏈接數據庫?app

二、基於CSV文件表格字段建立表函數

三、使用load data方法導入CSV文件內容大數據


load data語法簡介:this

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


本文分享自微信公衆號 - Python大數據分析(pydatas)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索