执行包含USE statemens的批处理时出现“Invalid cursor state”错误

2024-05-17 02:03:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在Windows上使用pypyodbc1.3.3和python3.5从microsoftsql数据库中检索数据,但是得到了一个pypyodbc.ProgrammingError.编程错误“[24000][Microsoft][SQL Server Native Client 11.0]游标状态无效”,使用以下代码:

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在microsoftsqlservermanagementstudio中工作,连接和执行在我编写的另一个脚本中工作,以便插入到同一个数据库中,如果我删除它也可以工作

^{pr2}$

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


Tags: client数据库sqlserverwindowsconncursordatabase
2条回答

根本不是不能执行USE ...语句,而是不能作为多语句批处理的一部分来执行。所以,这行不通。。。在

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

。。。但这会很好的

^{pr2}$

(使用pypyodbc 1.3.4和pyodbc 4.0.21进行测试)

我也有类似的问题。我可以通过删除“usedatabase”语句来解决这个问题。在

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

conn = pypyodbc.connect(r'DRIVER={SQL Server Native Client 11.0};SERVER=server;DATABASE=database;UID=uid;PWD=pwd')

相关问题 更多 >