因為工作上臨時有個需求,需要將excel文件轉為csv並入MySQL。於是寫了一個這么一個小程序。在轉csv的時候打開csv文件,好多較長的數字自動轉換為了科學計數法,后來把列格式轉換為文本,再次打開還是科學計數法,我相信好多人都對這個問題很頭疼。不過我發現雖然打開是科學計數法但是轉完csv之后用python直接讀,讀到的是完整的數據,數據不是科學計數法,后幾位也不是0。以下是代碼部分,這個代碼支持所有表的數據寫入,只需要在csv的第一列寫上對應的庫中表的字段名。
代碼:
# _*_ coding:utf-8 _*_
import sys
import csv
def ExecuteSql(tablename,fieldname,list_date=[]):
"將excel中數據寫入數據庫"
db = pymysql.connect(host="150.3.3.3", port=3317,user="luwenjie8061",
passwd="Passw0rd_luwenjie646", db="SENSHG1")
cursor = db.cursor()
date = ""
#將csv文件中的數據拼接成insertSQL中的格式
for num in range(0,len(list_date)):
date = date + "'" + str(list_date[num]) + "'" + ","
date = date[0:len(date) - 1]
sql = "insert into " + tablename + " (" + fieldname + ") " + \
"values " + \
" (" + \
date.strip() + ")"
# 使用 cursor() 方法創建一個游標對象 cursor
cursor.execute(sql)
db.commit() #注意:一定要提交才會寫入數據庫,寫入數據時不會自動提交
db.close()
def read_CSV(path):
fieldname = ""
readeritem.extend([row for row in csv_files])
#拼接出insertSQL中的字段名
for num in range(0, len(readeritem[0])):
fieldname = fieldname + readeritem[0][num] + ","
fieldname = fieldname[0:len(fieldname) - 1]
#獲取csv文件中每行數據,並寫入數據庫
for lines in range(1, len(readeritem)):
list_date = readeritem[lines]
ExecuteSql(tablename,fieldname,list_date)
#參數讀取,即執行該python文件時,第一個參數是要寫入的表名,第二個參數是excel文件名
tablename = sys.argv[1]
file = sys.argv[2]
#file = r'C:\Users\盧文傑\Desktop\盧文傑\工作文件\TEST\各區報警點反饋信息匯總_V0.3.xlsx'
read_CSV(file)