多线程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 ,它们是是/否。
我正在尝试在多个线程中使用 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 ,它们是是/否。