使⽤python,将excel数据批量导⼊数据库
这是上⼀篇⽂章的优化版本,相较于⼀条⼀条的执⾏sql语句,本⽂中,将excel中所有的数据先写到list列表中
在通过函数
⼀次性写⼊到数据库中
import pymysql
import xlrd
'''
连接数据库
args:db_name(数据库名称)
returns:db
'''
def mysql_link(de_name):
try:
db = t(host="127.0.0.1", user="root",
passwd="XXX",
db=de_name,
charset='utf8')
return db
except:
print("could not connect to mysql server")
'''
读取excel函数
args:excel_file(excel⽂件,⽬录在py⽂件同⽬录)
returns:book
'''
def open_excel(excel_file):
try:
book = xlrd.open_workbook(excel_file) #⽂件名,把⽂件与py⽂件放在同⼀⽬录下
return book
except:
print("open excel file failed!")
'''
执⾏插⼊操作
args:db_name(数据库名称)
table_name(表名称)
excel_file(excel⽂件名,把⽂件与py⽂件放在同⼀⽬录下)
'''
def store_to(db_name,table_name,excel_file):
db = mysql_link(db_name) # 打开数据库连接
cursor = db.cursor() # 使⽤ cursor() ⽅法创建⼀个游标对象 cursor
book = open_excel(excel_file) # 打开excel⽂件
sheets = book.sheet_names() # 获取所有sheet表名
for sheet in sheets:
sh = book.sheet_by_name(sheet) # 打开每⼀张表
row_num = sh.nrows
print(row_num)
list = [] # 定义列表⽤来存放数据
for i in range(1, row_num): # 第⼀⾏是标题名,对应表中的字段名所以应该从第⼆⾏开始,计算机以0开始计数,所以值是1
row_data = sh.row_values(i) # 按⾏获取excel的值
value = (row_data[0], row_data[1],row_data[2],row_data[3],row_data[4],row_data[5],\
row_data[6],row_data[7],row_data[8],row_data[9],row_data[10],row_data[11],row_data[12],row_data[13],row_data[14])
list.append(value) # 将数据暂存在列表
# print(i)
sql = "INSERT INTO "+ table_name + " ( bj_shijian,bjr_xingbie,anfa_didian,\
zb_x,zb_y,bj_chongfu,jiejing_lb_name,baojing_lb_name,baojing_lx_name,baojing_lx_xl_name,\
guanxia_qy_name,guanxian_dw_name,anfa_qulu,anfa_xiaoqu,chujing_dw_name)VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)" utemany(sql, list) # 执⾏sql语句
dbmit() # 提交
list.clear() # 清空list
print("worksheets: " + sheet + " has been inserted " + str(row_num) + " datas!")
cursor.close() # 关闭连接
db.close()
if __name__ == '__main__':
store_to('demo','demo_yangben','qh.xlsx')
可以选择传⼊的数据库,及数据库表名,excel⽂件名(excel⽂件和py⽂件同⽬录,否则加上路径)
每⼀万条写⼊⼀次
import pymysql
import xlrd
import sys
'''
连接数据库
args:db_name(数据库名称)
returns:db
'''
def mysql_link(de_name):
try:
db = t(host="127.0.0.1", user="xxx",
passwd="xxx",
db=xxx,
charset='utf8')
return db
except:
print("could not connect to mysql server")
'''
读取excel函数
args:excel_file(excel⽂件,⽬录在py⽂件同⽬录)
returns:book
'''
def open_excel(excel_file):
try:
book = xlrd.open_workbook(excel_file) # ⽂件名,把⽂件与py⽂件放在同⼀⽬录下
sizeof(book))
return book
except:
print("open excel file failed!")
'''
执⾏插⼊操作
args:db_name(数据库名称)
table_name(表名称)
excel_file(excel⽂件名,把⽂件与py⽂件放在同⼀⽬录下)
'''
def store_to(db_name, table_name, excel_file):
db = mysql_link(db_name) # 打开数据库连接
cursor = db.cursor() # 使⽤ cursor() ⽅法创建⼀个游标对象 cursor
list = [] # 定义列表⽤来存放数据
book = open_excel(excel_file) # 打开excel⽂件
sheets = book.sheet_names() # 获取所有sheet表名
for sheet in sheets:
sh = book.sheet_by_name(sheet) # 打开每⼀张表
row_num = sh.nrows
print(row_num)
num = 0 # ⽤来控制每次插⼊的数量
for i in range(1, row_num): # 第⼀⾏是标题名,对应表中的字段名所以应该从第⼆⾏开始,计算机以0开始计数,所以值是1 row_data = sh.row_values(i) # 按⾏获取excel的值
value = (row_data[0], row_data[1], row_data[2], row_data[3], row_data[4], row_data[5], \
row_data[6], row_data[7], row_data[8], row_data[9], row_data[10], row_data[11], row_data[12],
row_data[13], row_data[14])
list.append(value) # 将数据暂存在列表
num += 1
if( num>= 10000 ): # 每⼀万条数据执⾏⼀次插⼊
sizeof(list))
sql = "INSERT INTO " + table_name + " (time, xingbie, afdd, xzb, yzb, cfbj, jjlbmc, \
bjlbmc, bjlxmc, bjlxxlmc, gxqymc,gxdwmc, afql, afxqxx, cjdwmc)\
VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
num = 0 # 计数归零
list.clear() # 清空list
print("worksheets: " + sheet + " has been inserted 10000 datas!")
# 将剩下不⾜10000的数据执⾏插⼊
sql = "INSERT INTO " + table_name + " (time, xingbie, afdd, xzb, yzb, cfbj, jjlbmc, \
bjlbmc, bjlxmc, bjlxxlmc, gxqymc,gxdwmc, afql, afxqxx, cjdwmc)\
VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)" utemany(sql, list) # 执⾏sql语句
print("worksheets: " + sheet + " has been inserted "+len(list)+" datas!")
list.clear() # 清空list
print("worksheets: " + sheet + " has been inserted " + str(row_num) + " datas!") dbmit() # 提交
cursor.close() # 关闭连接
db.close()
python怎么读取excel的数据if __name__ == '__main__':
store_to('demo', 'demo_yangben', 'xxx.xlsx')
sizeof()⽅法监测内存占⽤
可以看上⼀篇⽂章来进⾏过渡。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论