25

我在 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(...):

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

4

3 回答 3

23

根据这个人

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

并且您可以确定可以支持并发游标:

import pyodbc
connection = pyodbc.connect(...)
how_many = connection.getinfo(pyodbc.SQL_MAX_CONCURRENT_ACTIVITIES)
print(how_many)
于 2018-05-17T10:07:28.380 回答
-2

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

于 2013-02-21T22:24:16.470 回答
-5

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

于 2011-04-07T01:16:11.800 回答