3

我尝试在 Windows 上使用 pypyodbc 1.3.3 和 Python 3.5 从 Microsoft SQL 数据库中检索数据,但使用以下代码得到了 pypyodbc.ProgrammingError '[24000] [Microsoft] [SQL Server Native Client 11.0] Invalid cursor state' :

import pypyodbc
conn = pypyodbc.connect(r'DRIVER={SQL Server Native Client 11.0};SERVER=server;DATABASE=database;UID=uid;PWD=pwd')
cursor = conn.cursor()
sql = '''USE database;
SELECT R0
FROM table;'''
cursor.execute(sql)
results = cursor.fetchone()
print(results)

SQL在Microsoft SQL Server Management Studio中工作,连接和执行在我编写的另一个脚本中工作以插入同一数据库,如果我删除也可以工作

results = cursor.fetchone()

到目前为止,我尝试了 cursor.fetchone()、cursor.fetchall() 和 list(cursor),但都产生了相同的结果,这让我相信命令本身不是问题。根据这个微软网站,这意味着没有打开的光标,但我可以得到它的描述,所以根据我的理解必须有。

4

2 回答 2

1

根本不是无法执行USE ...语句问题,只是我们不能将其作为多语句批处理的一部分来执行。所以,这行不通...

crsr.execute("""\
USE master;
SELECT TOP 2 name FROM sys.tables ORDER BY name;
""")
rows = crsr.fetchall()  # error

...但这会很好

crsr.execute("USE master")
crsr.execute("SELECT TOP 2 name FROM sys.tables ORDER BY name")
rows = crsr.fetchall()

(使用 pypyodbc 1.3.4 和 pyodbc 4.0.21 测试)

于 2017-11-27T21:56:31.917 回答
0

我有一个类似的问题。我能够通过删除“USE Database”语句来解决这个问题。

您已经在这里连接到您的数据库:

conn = pypyodbc.connect(r'DRIVER={SQL Server Native Client 11.0};SERVER=server;DATABASE=database;UID=uid;PWD=pwd')
于 2017-11-27T18:58:13.303 回答