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] where ClosingDate = 'DateProd''执行失败:('22007', '[22007] [Microsoft][ODBC SQL Server Driver][SQL Server]从字符串转换日期和/或时间时转换失败。(241) (SQLExecDirectW) ')
这完全没有意义,为什么当我把它作为ClosingDate='2020-04-13'的变量传递时,它可以工作,但当我试图使用ClosingDate='DateProd'的变量时(它包含完全相同的值和数据类型是一个字符串),它不会工作并抛出一个错误。
我试着把引号加倍、三倍,把单引号和双引号倒置,似乎都不起作用。我在论坛上找了一圈,没有找到这个具体问题的答案。我认为解决方案很简单,但我是Python的一个新手,想知道。我想让这个东西变成动态的,所以是的,我需要使用一个变量...
1 个回答
0 人赞同
你正在传递字符串字面'DateProd'
作为日期。你需要传递的是价值的变量作为一个参数,像这样。