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

时间:2011-04-06 22:26:07

标签: python sql-server pyodbc

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

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

3 个答案:

答案 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)