我在python 2.6上使用pyodbc连接到Microsoft SQL Server 2005.我打开一个连接,创建几个游标:
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(...):
我真的必须创建到同一个数据库的多个连接吗?
答案 0 :(得分:3)
根据this guy
Cursor对象用于执行SQL语句。 ODBC和pyodbc 每个连接允许多个游标,但并非所有数据库都支持 此
您可以通过以下方式确定并发游标:
import pyodbc
connection = pyodbc.connect(...)
how_many = connection.getinfo(pyodbc.SQL_MAX_CONCURRENT_ACTIVITIES)
print(how_many)
答案 1 :(得分:-1)
我自己的做法我从未遇到过使用多个数据库游标的必要性。这些问题通过复杂的SQL查询(连接,组)来解决。或者(如果你可以忽略性能问题)使用几个简单的查询。
答案 2 :(得分:-1)