【发布时间】:2018-01-22 13:11:42
【问题描述】:
我正在尝试将 .csv 文件中包含的数据从我的电脑插入到远程服务器。这些值被插入到一个包含 3 列的表中,即Timestamp、Value 和TimeseriesID。我必须一次插入大约 3000 行,因此我目前使用的是pyodbc 和executemany。
到目前为止,我的代码如下所示:
with contextlib.closing(pyodbc.connect(connection_string, autocommit=True)) as conn:
with contextlib.closing(conn.cursor()) as cursor:
cursor.fast_executemany = True # new in pyodbc 4.0.19
# Innsert values in the DataTable table
insert_df = df[["Time (UTC)", column]]
insert_df["id"] = timeseriesID
insert_df = insert_df[["id", "Time (UTC)", column]]
sql = "INSERT INTO %s (%s, %s, %s) VALUES (?, ?, ?)" % (
sqltbl_datatable, 'TimeseriesId', 'DateTime', 'Value')
params = [i.tolist() for i in insert_df.values]
cursor.executemany(sql, params)
当我使用pyodbc 4.0.19 时,我将选项fast_executemany 设置为True,这应该可以加快速度。但是,由于某种原因,当我启用 fast_executemany 选项时,我没有看到任何重大改进。我可以使用其他方法来加快文件的插入速度吗?
此外,关于上面显示的代码的性能,我注意到当禁用autocommit=True 选项时,我在数据末尾包含cursor.commit() 命令时导入数据的速度明显更快。发生这种情况有什么我不知道的具体原因吗?
任何帮助将不胜感激:)
【问题讨论】:
-
也许这个turbodbc.readthedocs.io/en/latest 可能是一个更好的解决方案。如果你好奇,你可以看这个youtube.com/watch?v=B-uj8EDcjLY
标签: python sql-server python-3.x pypyodbc