Python Pyodbc SQL Server 返回“NoneType”
2021-02-09
674
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', 'ODBC Driver 13 for SQL Server', 'ODBC Driver 17 for SQL Server']
关于返回 None 记录的原因以及如何修复,您有什么想法吗?
2个回答
sql 脚本不包含“set no count on;”。在执行之前添加此行后,脚本便可正常运行。
sql=f"set no count on;exec dbo.storedproc '{AdmitDate_Start}','{AdmitDate_End}','{RelativeStartDate}','{RelativeEndDate}'"
dcrowley01
2021-02-10
在我最后,以下作品。 (请注意使用参数。)
464803082
其中dbo.delete_me定义为
476274630
设置无论如何,nocount on;
都不会影响python代码。
2021-02-09