为什么用fast_executemany = True调用cursor.executemany()会导致分段错误?

时间:2018-07-31 16:35:36

标签: python segmentation-fault pyodbc freetds

我有一个连接到Azure SQL数据库的pydodbc游标,并安装了在Mac OS Sierra 10.12.6上运行的最新版本的FreeTDS:

cursor.execute("CREATE TABLE test(a INT, b INT)")
cursor.commit()

这可以,很好,然后我尝试

cursor.fast_executemany=True
cursor.execute("INSERT INTO test(a, b) VALUES(?,?)", [(1,2),(3,4),(5,6)])

这会导致分段错误,而我看到的唯一错误消息是segmentation fault: 11

如果我未设置cursor.fast_executemany=True,则代码可以正常工作。

1 个答案:

答案 0 :(得分:3)

在Xubuntu 16.04下,我能够使用FreeTDS 1.00.94和unixODBC 2.3.6重现您的“分段错误”问题。

fast_executemany = True使用称为“参数数组”的ODBC功能,并非所有ODBC驱动程序都支持该功能。显然FreeTDS ODBC是不支持它的驱动程序之一。

如果您确实需要使用fast_executemany = True,则可以使用Microsoft's ODBC Driver for SQL Server。它确实支持ODBC参数数组。