使用Access ODBC的pyodbc fast_executemany崩溃了Python解释器

时间:2018-04-24 13:28:20

标签: python ms-access pyodbc

我尝试在MS Access数据库中生成并插入许多(> 1.000.000)行。对于代我使用numpy函数,因此我尝试使用python访问数据库。我开始使用pyodbc:

import numpy as np
import pyodbc as db
connection_string = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:/Users.../DataCreation.accdb;"
connection = db.connect(connection_string)
cur = connection.cursor()

k = 0
numberofdatasets=1000

for l in range(50):
    params=np.empty(numberofdatasets, dtype=[('valnr', int),('val', float)])

    for j in range(numberofdatasets):
        params[j]= (k, somevalue generated with a numpy function)      
        k=k+1

    params = np.array(params).tolist()
    cur.executemany("INSERT INTO DataFinal VALUES (1,?,1,?);", params)

    connection.commit()

connection.close()

这样可行,但对我有用的时间太长了。我计时了,问题是

cur.executemany

我搜索了互联网,发现了fast_executemany标志。但是当我添加行

cur.fast_executemany = True

我的内核死了。有谁知道为什么?我使用64位Windows 10,Python 3.6,Spyder 3.2.8和MS Access 2016.请不要建议不使用MS Access,我知道有更高效的数据库可以做到这一点,但是现在这是我可以使用的全部内容。我也知道,首先生成numpy数组然后将其转换为列表可能不是最好的。我的下一个尝试是turbodbc及其功能

 cursor.executemanycolumns

但是这引起了驱动程序的错误,因此我认为是另一个问题。任何帮助表示赞赏,但也许我应该补充一点,我刚开始使用Python连接数据库,我更喜欢至少了解一下这个问题而不只是复制一些神秘的代码:)谢谢。

1 个答案:

答案 0 :(得分:1)

pyodbc fast_executemany功能使用名为"参数数组"的ODBC机制。并非所有ODBC驱动程序都支持参数数组,显然Microsoft Access ODBC驱动程序是不支持的。如pyodbc Wiki

中所述
  

请注意,此功能目前仅适用于在Windows上运行的使用Microsoft的SQL Server ODBC驱动程序的应用程序。