【发布时间】:2016-09-23 15:57:07
【问题描述】:
我尝试在 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),但都产生了相同的结果,这让我相信命令本身不是问题。 根据this microsoft site,这意味着没有打开的光标,但我可以得到它的描述,所以根据我的理解必须有。
【问题讨论】:
-
删除
USE database语句并重试。 -
是的,同意 SSNR。我的理解是微软让你改变数据库。但是 Python 不允许你这样做。您必须首先连接到正确的数据库才能处理您想要的工作,并且不要更改 sql 代码。我认为 Python 使用比 MS 更安全的方法是一个安全问题。
-
其实只要把SELECT语句改成
SELECT R0 FROM database.dbo.table;之类的。这就是 SQL Server 中的多部分命名 -. . 是在任何 DB 中引用表的格式,无论您连接到哪个 DB。
标签: python sql sql-server pypyodbc