我可以在一个连接中使用多个游标与pyodbc和MS SQL Server吗?
我在用 Python 2.6 的 pyodbc 库连接 Microsoft SQL Server 2005。我打开了一个连接,创建了几个游标:
c1 = connection.cursor()
c2 = connection.cursor()
然后我在第一个游标上运行了一个查询。
c1.execute("select * from foo")
接着我在第二个游标上运行了一个查询:
c2.execute("select * from bar")
...结果我遇到了一个错误:“连接正在处理另一个句柄的结果。”
在我执行 c1.fetchall()
或 c1.close()
之后,我才能使用 c2。
我的问题是:既然我一次只能使用一个游标,为什么还允许在一个连接上创建多个游标呢?而且同一个游标其实可以重复使用。如果我想对另一个查询的每一行结果都运行一个查询,比如这样:
for x in c1.execute(...):
for y in c2.execute(...):
我真的需要为同一个数据库创建多个连接吗?
3 个回答
-6
在我自己的实践中,我从来没有遇到需要使用多个数据库游标的情况。通常这种问题可以通过复杂的SQL查询来解决,比如使用连接查询(joins)或分组查询(groups)。或者,如果你不太在意性能问题的话,也可以通过使用几个简单的查询来解决。
25
根据这个链接
游标对象用于执行SQL语句。ODBC和pyodbc允许在一个连接中使用多个游标,但并不是所有数据库都支持这个功能。
你可以通过以下方式来检查是否支持同时使用多个游标:
import pyodbc
connection = pyodbc.connect(...)
how_many = connection.getinfo(pyodbc.SQL_MAX_CONCURRENT_ACTIVITIES)
print(how_many)
-2