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

26 投票
3 回答
26207 浏览
提问于 2025-04-16 15:14

我在用 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

这似乎是通过多线程来支持的:http://technet.microsoft.com/en-US/library/ms131700(v=sql.90).aspx

撰写回答