【发布时间】:2021-05-13 11:11:45
【问题描述】:
Pyodbc 正在返回 TypeError:“NoneType”对象不可迭代。虽然,当我将 sql f 字符串复制并粘贴到 sql server 中时,我得到了数百万条记录。
cnxn = pyodbc.connect('DRIVER={SQL Server};'
'SERVER=server;'
'DATABASE=db;')
sql=f"exec dbo.storedproc '{AdmitDate_Start}','{AdmitDate_End}','{RelativeStartDate}','{RelativeEndDate}'"
df=pd.read_sql(sql,cnxn)
我能够从同一位置(服务器和数据库)成功执行另一个存储过程。但是,该存储过程不需要我传递上面的四个变量。我还尝试使用 Declare 创建 sql 语句并传入变量。 RelativeStartDate 和 RelativeEndDate 可以为空。
sql='''declare @AdmitDate_Start datetime = '''+"'"+ads+"'"+''';declare @AdmitDate_End datetime = '''+"'"+ade+"'"+''';declare @RelativeStartDate VARCHAR(20);declare @RelativeEndDate VARCHAR(20);exec dbo.storedproc @AdmitDate_Start, @AdmitDate_End,@RelativeStartDate,@RelativeEndDate;'''
这在 python 中也返回了 0 条记录,但在 SQL Server 中运行良好。
这导致我尝试了几个不同的驱动程序,但这些都无法连接:
['SQL Server Native Client 11.0', '用于 SQL Server 的 ODBC 驱动程序 13', '用于 SQL Server 的 ODBC 驱动程序 17']
关于返回 None 记录的原因以及如何解决的任何想法?
【问题讨论】:
-
检查存储过程是否以
SET NOCOUNT ON;开头 -
确实有这个:SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO
标签: python sql-server pandas sqlalchemy pyodbc