Python 我可以在一个pyodbc和MS SQL Server连接上使用多个游标吗?

Python 我可以在一个pyodbc和MS SQL Server连接上使用多个游标吗?,python,sql-server,pyodbc,Python,Sql Server,Pyodbc,我正在使用Python2.6上的pyodbc连接到MicrosoftSQLServer2005。我打开一个连接,创建两个游标: c1 = connection.cursor() c2 = connection.cursor() 然后在第一个游标上运行查询 c1.execute("select * from foo") 现在,我在第二个游标上运行一个查询: c2.execute("select * from bar") …我得到一个错误:“连接正忙着处理另一个hstmt的结果。” 在我执行了

我正在使用Python2.6上的pyodbc连接到MicrosoftSQLServer2005。我打开一个连接,创建两个游标:

c1 = connection.cursor()
c2 = connection.cursor()
然后在第一个游标上运行查询

c1.execute("select * from foo")
现在,我在第二个游标上运行一个查询:

c2.execute("select * from bar")
…我得到一个错误:“连接正忙着处理另一个hstmt的结果。”

在我执行了
c1.fetchall()
c1.close()
之后,我就可以使用c2了

我的问题是:如果一次只允许使用一个游标,并且同一个游标始终可以重复使用,为什么还要允许我在一个连接上创建多个游标?如果我想对另一个查询的每一行结果运行一个查询,如下所示:

for x in c1.execute(...):
    for y in c2.execute(...):

我真的必须创建到同一数据库的多个连接吗?

我自己的实践表明,我从来没有遇到过使用多个数据库游标的必要性。这些问题通常通过复杂的SQL查询(联接、组)来解决。或者(如果可以忽略性能问题),使用几个简单的查询。

这似乎是通过多线程支持的:

根据

游标对象用于执行SQL语句。ODBC与pyodbc 允许每个连接使用多个游标,但并非所有数据库都支持 这个

您可以通过以下方式确定是否支持并发游标:

import pyodbc
connection = pyodbc.connect(...)
how_many = connection.getinfo(pyodbc.SQL_MAX_CONCURRENT_ACTIVITIES)
print(how_many)

我想我根本不需要这个。一个线程可以建立多个连接,每个连接都有自己的游标。当然,两个线程可以各自有自己的连接。或者你是说两个线程可以共享一个连接对象,但每个线程都有自己的游标?@Josh:是的,一个连接,两个游标。不管怎么说,这对我很有用。由于GIL,线程甚至不能在CPython中提供并发性,但似乎允许在本机SQL客户端中使用多个游标。通过任何更改,您是否可以使用单个连接创建多个游标?。我也有相同的设置reqt@user1050619. 对在连接字符串中启用多个活动记录集也很有帮助:;MARS_Connection=yes直到没有更好的答案吗?当我编写自定义迁移脚本将设计糟糕、文档记录不良的系统中的数据转移到新系统时,我经常需要在两个数据库上打开几个游标。