尝试根据报表的生产日期将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)