为了账号安全,请及时绑定邮箱和手机立即绑定

目前是没读取一行就commit了,跑了下大概时间好像30分钟了,是不是太慢了点啊?

目前是没读取一行就commit了,跑了下大概时间好像30分钟了,是不是太慢了点啊?

忽然笑 2023-05-01 15:10:33
#根据索引获取Excel表格中的数据   参数:file:Excel文件路径     colnameindex:表头列名所在行的所以  ,by_index:表的索引 def excel_table_byindex(file='test.xlsx', colnameindex=0, by_index=0):     data = open_excel(file)     table = data.sheets()[by_index]     nrows = table.nrows #行数     ncols = table.ncols #列数     colnames =  table.row_values(colnameindex) #某一行数据      for rownum in range(1, nrows):         row = table.row_values(rownum)         if row:             app = []             for i in range(len(colnames)):                if (2 == table.cell_type(rownum, i)):                    if (colnames[i] == "month"):                         row[i] = int(row[i])             insert(row[0],row[1],row[2])insert 方法就是用 pyodbc 的 cursor.execute 然后commit,这里目前是没读取一行就commit了,跑了下大概时间好像30分钟了,是不是太慢了点excel是有30列
查看完整描述

1 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

我的建议是将 excel 转成 csv ,然后 sqlserver 应该有命令行版本的导入工具吧(这个应该最节省时间了),如果数据库没有在本机,应试选择先将导出的 csv 文件上传到服务器,这样虽然会有额外的传输时间,也会快很多。

如果觉得这样比较麻烦,就批量执行 insert ,比如每20条进行一次批量 insert 和 commit ,自己调整吧。

如果对导入数据后不需要立即反馈,可以写成定时任务,后台运行,然后任务跑完后发通知就好了。


查看完整回答
反对 回复 2023-05-04
  • 1 回答
  • 0 关注
  • 54 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信