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

问题描述 投票:0回答:1

尝试根据报告的生产日期将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驱动程序] [SQL Server]从字符串转换日期和/或时间时转换失败。(241)(SQLExecDirectW)')

对于为什么当我将它作为ClosingDate ='2020-04-13'的乱抛垃圾传递时,它是完全没有意义的,但是当我尝试使用ClosingDate ='DateProd'(包含完全相同的变量)时,值和数据类型为字符串)将无法正常工作并引发错误。

我尝试加倍,三倍引号,将单引号和双引号反转,似乎没有任何作用。我在论坛上四处张望,找不到这个特定问题的答案。我认为该解决方案很容易,但是我是Python的新手,我想知道..我正在尝试使它动态化,所以是的,我需要使用一个变量...

谢谢

python sql sql-server dataframe pyodbc
1个回答
0
投票

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

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)
© www.soinside.com 2019 - 2024. All rights reserved.