python sql 日期查询_将python日期列表传递给sql查询where claus

您正在使用repr()将对象转换为字符串。此方法不适用于应用它的用例;它提供了有关基础对象的内部表示的信息。在

您真正想做的是格式化您的时间戳,使之成为适合您需要的字符串。与常规python Datetime对象一样,pandas'Timestamp对象也有一个名为strftime()的方法,用于字符串格式化。在# This part is just to create a MWE; it mimics your dataframe that we

# do not have at hand here.

df = pandas.DataFrame({

'BEG_DT': [

pandas.Timestamp('2018-04-29'),

pandas.Timestamp('2019-04-22')]

})

# This is what you did

begdtlist = df['BEG_DT'].tolist()

print(begdtlist)

# This is how you can format the date according to your needs

for dt in begdtlist:

print(dt.strftime('%Y-%m-%d'))

这将生成以下输出:

^{pr2}$

顺便说一句,pandas将你的日期转换成它自己的Timestamp对象,因为它们需要用于DataFrame交互和聚合等的接口,而这些接口在常规pythonDate或Datetime对象中不存在。在

但是,您不能在SQL查询中使用该列表,因为它将生成无效语法:SELECT calndr_dt, wk_of_mnth

FROM databasename

WHERE calendr_dt = CAST 2018-04-29, 2018-04-22 AS DATE

^

this will be your syntax error

您的方法在以下几个方面存在缺陷:您正试图将一个列表插入到一个CAST调用中,这将失败

您正在针对数组测试列的相等性,这将失败

因此,您可能还需要阅读SQL语法,并在尝试通过python插入值之前生成一个示例查询。在

它可能看起来像这样(未经测试-小心使用):sql = '''

SELECT calndr_dt, wk_of_mnth

FROM databasename

WHERE calendr_dt IN [{:s}]

'''.format(', '.join(

[

'\'{:s}\'::DATE'.format(dt.strftime('%Y-%m-%d'))

for dt in begdtlist

]

))

结果是:SELECT calndr_dt, wk_of_mnth

FROM databasename

WHERE calendr_dt IN ['2018-04-29'::DATE, '2019-04-22'::DATE]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值