带有 Access ODBC 的 pyodbc fast_executemany 崩溃 Python 解释器

pyodbc fast_executemany with Access ODBC crashes Python interpreter

我正在尝试在 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 与数据库相关,我更愿意至少了解一点问题,而不仅仅是复制一些神秘代码 :) 谢谢。

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

中所述

Note that this feature ... is currently only recommended for applications running on Windows that use Microsoft's ODBC Driver for SQL Server.