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

发布于 2024-10-31 10:21:17 字数 646 浏览 0 评论 0原文

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

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

I'm using pyodbc on python 2.6 to connect to Microsoft SQL Server 2005. I open a connection, create a couple of cursors:

c1 = connection.cursor()
c2 = connection.cursor()

and then run a query on the first cursor.

c1.execute("select * from foo")

Now I run a query on the second cursor:

c2.execute("select * from bar")

...and I get an error: "Connection is busy with results for another hstmt."

After I do a c1.fetchall() or c1.close() then I can use c2.

My question is: Why am I even allowed to create multiple cursors on a connection, if I'm only allowed to use one at a time, and the same one can always be reused? And, if I want to run a query for each row of the results of another query, like this:

for x in c1.execute(...):
    for y in c2.execute(...):

do I really have to create multiple connections to the same database?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

茶底世界 2024-11-07 10:21:17

根据 这个人

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

您可以确定可以通过以下方式支持并发游标:

import pyodbc
connection = pyodbc.connect(...)
how_many = connection.getinfo(pyodbc.SQL_MAX_CONCURRENT_ACTIVITIES)
print(how_many)

According to this guy

Cursor objects are used to execute SQL statements. ODBC and pyodbc
allow multiple cursors per connection, but not all databases support
this.

and you can determine concurrent cursors can be supported with:

import pyodbc
connection = pyodbc.connect(...)
how_many = connection.getinfo(pyodbc.SQL_MAX_CONCURRENT_ACTIVITIES)
print(how_many)
满栀 2024-11-07 10:21:17

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

I my own practice I have never met necessity to use more than one database cursor. Such problems are used to be solved by sophisticated SQL queries (joins, groups). Or (if you can to ignore perfomance issues) by using several simple queries.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文