【发布时间】:2020-04-21 04:22:59
【问题描述】:
尝试根据报告的生产日期动态地将 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] where ClosingDate = 'DateProd'': ('22007', '[22007] [Microsoft][ ODBC SQL Server Driver][SQL Server]从字符串转换日期和/或时间时转换失败。(241) (SQLExecDirectW)')
这绝对没有意义,为什么当我将它作为 ClosingDate= '2020-04-13' 的文字传递时它可以工作,但是当我尝试使用一个变量时相同的值和数据类型是字符串)它将不起作用并引发错误。
我尝试了双引号、三倍引号、反转单引号和双引号,似乎没有任何效果。我环顾论坛,找不到这个特定问题的答案。我认为解决方案很简单,但我是 Python 的新手,想知道。我正在尝试使这个动态化,所以是的,我需要使用一个变量...
谢谢
【问题讨论】:
-
您需要阅读文档或查找有关在 python 中参数化 sql 调用的众多示例、教程或论坛帖子之一。在您的尝试中,您根本没有传递“变量” - 您只是将变量名称作为字符串文字传递。
-
我现在更好地理解了 params 部分,因为其他人回答了,现在我可以看到我的问题是如何在其他线程中以某种方式回答的。但老实说,如果没有那个提示,我会花更多的时间哈哈哈。也感谢您的输入。我现在已经进入 Python 3 周了,请与我一起裸露 xD
标签: python sql sql-server dataframe pyodbc