python mysql 保存csv_使用Python将csv文件快速转存到Mysql
因為一些工作需要,我們經常會做一些數據持久化的事情,例如將臨時數據存到文件里,又或者是存到數據庫里。
對于一個規范的表文件(例如csv),我們如何才能快速將數據存到Mysql里面呢?
這個時候,我們可以使用python來快速編寫腳本。
使用Python連接Mysql,我們就少不了使用pymysql這個模塊。
使用pip進行快速安裝:
pip install pymysql
安裝結束,我們使用pymysql連接數據庫:
import pymysql
con = pymysql.connect(user="root", passwd="root", db="test", host="47.95.xxx.xxx", local_infile=1)`
user是連接數據庫的用戶名,passwd是連接數據的密碼,db是你想要連接數據庫的名字,host是你要連接數據庫的主機,如果就是自己的電腦,就填127.0.0.1。我們這邊是將csv批量寫到數據庫,需要設置local_infile參數,如果不添加會報錯。
連接完數據庫我們便可以使用游標來執行sql語句了:
cur = con.cursor()
定義好了游標我們就可以使用execute方法來執行sql語句了。
cur.execute("set names utf8")
cur.execute("SET character_set_connection=utf8;")
下面來打開csv文件,讀取里面的內容,我們需要提取第一行列名的信息,然后創建表:
with open(file_path, 'r', encoding='utf8') as f:
reader = f.readline()
print(reader)
devide = reader.split(',') # 做成列表
devide[-1] = devide[-1].rstrip('\n') # 去除最后的換行符 print(devide)
默認讀出來的數據就是一行字符串,現在我們通過“,”提取我們的列名,并且去除我們最后一個列名的換行符,這樣我們就能得到所有的列名了。
下面我們需要創建表,在創建表之前我們需要將每個列指定一下格式:
column = ''
for dd in devide: column = column + dd + ' varchar(255),'
拼接好后我們需要將最后一個列的逗號去掉
col = column.rstrip(',')
這樣我們就可以寫創建表的sql語句了:
table_name = "TBexport"
create_table_sql = 'create table if not exists {} ({}) DEFAULT CHARSET=utf8'\ .format(table_name, col)
cur.execute(create_table_sql)
下面我們可以向表中插數據了:
首先要介紹一下,mysql支持csv數據的導入,以下是sql的語法:
最后一步,提交事務。(事務保證他們的連貫性,只要一步錯就會進行回滾)
con.commit()
記得關閉游標和數據庫連接。
cur.close() con.close()
完整代碼:
import pymysql
# file_path = "exam.csv"
# table_name = 'update_time_table'
file_path = "export.csv"
table_name = "TBexport"
try:
con = pymysql.connect(user="root", passwd="root", db="test", host="47.95.20x.xxx", local_infile=1) con.set_charset('utf8')
cur = con.cursor()
cur.execute("set names utf8")
cur.execute("SET character_set_connection=utf8;")
with open(file_path, 'r', encoding='utf8') as f:
reader = f.readline()
print(reader)
devide = reader.split(',') # 做成列表
devide[-1] = devide[-1].rstrip('\n') # 去除最后的換行符
print(devide)
column = '' for dd in devide: # 如果標題過長,只能存成text格式 if dd == "標題": column = column + dd + ' TEXT,' else: column = column + dd + ' varchar(255),'
col = column.rstrip(',') # 去除最后一個多余的,
# print(column[:-1])
create_table_sql = 'create table if not exists {} ({}) DEFAULT CHARSET=utf8'.format(table_name, col) print(create_table_sql)
data = 'LOAD DATA LOCAL INFILE \'' + file_path + '\'REPLACE INTO TABLE ' + table_name + ' CHARACTER SET UTF8 FIELDS TERMINATED BY \',\' ENCLOSED BY \'\"\' LINES TERMINATED BY \'\n\' IGNORE 1 LINES;'
cur.execute(create_table_sql)
cur.execute(data.encode('utf8'))
print(cur.rowcount)
con.commit()
except:
print("發生錯誤")
con.rollback()
finally:
cur.close()
con.close()
總結
以上是生活随笔為你收集整理的python mysql 保存csv_使用Python将csv文件快速转存到Mysql的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: stata中介效应的sobel检验_SP
- 下一篇: python中content的用法_学p