您正在使用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]