从字符串转换日期和/或时间时,PYODBC转换失败,不知道该做什么

2024-04-25 17:48:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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'",

它向我抛出了一个错误,即:从[MarketData].[pcbond].[PCbonds]中选择sql'Select*,其中ClosingDate='DateProd':('22007','[22007][Microsoft][ODBC sql Server Driver][sql Server]从字符串转换日期和/或时间时执行失败。(241)(SQLExecDirectW)]

这对于为什么当我将它作为一个literal传递,其中ClosingDate='2020-04-13'起作用是完全没有意义的,但是当我尝试使用ClosingDate='DateProd'(其中包含完全相同的值和作为字符串的数据类型)的变量时,它将不起作用并抛出错误

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

谢谢


Tags: 字符串数据库sqlserver动态connwhereselect
1条回答
网友
1楼 · 发布于 2024-04-25 17:48:13

您正在传递字符串文字'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)

相关问题 更多 >