在項目中對后台進行測試時,經常會遇到要在數據庫新增數據,那么如何快速新增數據來提高工作效率呢?
現整理如下:
代碼內容(csv_to_mysql.py):
# coding=utf-8
import pymysql
file_path = "export.csv"
table_name = "export"
try:
con = pymysql.connect(user="root",
passwd="123456",
db="test01",
host="localhost",
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()
運行結果:
以上是以本地數據庫作為例子,實際工作中可根據自己的需求修改數據庫連接和SQL語句