多线程pyodbc连接

Multithreaded pyodbc connection

我正在尝试在多个线程中使用 pyodbc 连接。我收到以下错误:Connection is busy with results for another command (0) (SQLExecDirectW)')。我也尝试设置 MultipleActiveResultSets=yes; 并得到相同的结果。

我真的不想为每个线程或查询都创建一个连接。我也不想使用锁来序列化来自所有线程的查询。

我最初使用的是驱动程序 "SQL Server",然后很不幸地转到了 "SQL Server Native Client 11.0"。

有什么建议吗?

由于这个问题是征求建议而不是真正有力的答案,所以这是我的:

首先,我建议为每个创建的线程创建一个新连接。

或者,如果您可以终止当前正在执行的操作,请在重新使用连接之前尝试 cursor.cancel()。

此外,经过快速搜索,我找到了多个与此问题相关的 Multiple Active Result Sets 参考资料。如果您的数据库支持它,请尝试将 "MultipleActiveResultSets=True" 添加到您的连接字符串。

我希望这些建议之一能帮助您到达目的地!

根据 ODBC-documentation https://docs.microsoft.com/en-us/sql/relational-databases/native-client/applications/using-connection-string-keywords-with-sql-server-native-client?view=sql-server-ver15,您应该使用的关键字是 MARS_Connection=yes。将它与 pyodbc 一起使用确实有效并解决了我的 dual-open-cursor -问题。

使用 MultipleActiveResultSets=true 不起作用有两个原因:使用不正确的关键字和使用不正确的值,因为在 ODBC 标志中不是 true/false ,它们是/