PYODBC-从字符串转换日期和/或时间时转换失败-不知道该怎么办



尝试根据报表的生产日期将SQL Server数据库表动态加载到Python pandas DataFrame中。当我写作时,我的问题如下:

import pyodbc
conn = pyodbc.connect(server = "10.87.254.73", Database= "CTData", Driver ="{SQL Server}")
PCBondsDB = pd.read_sql_query("Select * From [MarketData].[pcbond].[PCbonds] where ClosingDate = '2020-04-13'", conn)
conn.close()

它是有效的,我可以连接到数据库并提取我的表,但如果我将where ClosingDate=更改为包含日期作为字符串的变量,它将不起作用。

假设DateProd="2020-04-13",现在我尝试:

PCBondsDB = pd.read_sql_query("Select * From [MarketData].[pcbond].[PCbonds] where ClosingDate = 
'DateProd'",

它给我带来了一个错误:在sql'Select*From[MarketData]上执行失败。[pcbond]。[PCbonds]其中ClosingDate="DateProd":("22007","[22007][Microsoft][ODBC SQL Server Driver][SQL Server]从字符串转换日期和/或时间时转换失败。(241((SQLExecDirectW("(

这完全没有道理,为什么当我把它作为一个垃圾传递给ClosingDate='2020-04-13'时,它是有效的,但当我尝试使用ClosingDate='DateProd'的变量(它包含完全相同的值和数据类型作为字符串(时,它不起作用,并引发错误。

我试着把引号翻两倍,翻三倍,把单引号和双引号倒过来,但似乎都不起作用。我浏览了一下论坛,找不到这个具体问题的答案。我认为这个解决方案很简单,但我是Python的新手,我想知道。。我正在尝试使这个动态,所以是的,我需要使用一个变量。。。

感谢

您正在传递字符串文字'DateProd'作为日期。您需要将变量的作为参数传递,如下所示:

date_prod = '2020-04-13'
sql = "Select * From [MarketData].[pcbond].[PCbonds] where ClosingDate = ?"
param_values = (date_prod, )
pc_bonds_db = pd.read_sql_query(sql, engine, params=param_values)

最新更新