我在数据框中有一个日期列,我将其转换为日期列表
begdtlist = df["BEG_DT"].tolist()
print(begdtlist)
返回以下内容。在
日期的类型被强制转换为时间戳。在
我将这个列表传递给一个SQL查询,如下所示
sql = ("select calndr_dt,wk_of_mnth from DatabaseName where calndr_dt = cast {} as date").format(repr(begdtlist).replace('[','(').replace(']',')'))
但是,我的sql是以下面的格式生成的,这导致查询失败。在
"select calndr_dt,wk_of_mnth from DatabaseName where calndr_dt = cast
(Timestamp('2018-04-29 00:00:00'), Timestamp('2018-04-22 00:00:00'),
Timestamp('2018-04-22 00:00:00'), Timestamp('2018-04-29 00:00:00'),
Timestamp('2018-04-29 00:00:00')) as date"
我不知道为什么它是作为时间戳来的。我只需要引用日期部分。如有任何指导,我们将不胜感激。在
您正在使用
repr()
将对象转换为字符串。此方法不适用于应用它的用例;它提供了有关基础对象的内部表示的信息。在您真正想做的是格式化您的时间戳,使之成为适合您需要的字符串。与常规python
Datetime
对象一样,pandas
'Timestamp
对象也有一个名为strftime()
的方法,用于字符串格式化。在这将生成以下输出:
^{pr2}$在第2行和第3行中,格式已经创建了SQL查询生成所需的日期字符串。你可以阅读formatting options in the official python docs。在
顺便说一句,
pandas
将你的日期转换成它自己的Timestamp
对象,因为它们需要用于DataFrame
交互和聚合等的接口,而这些接口在常规pythonDate
或Datetime
对象中不存在。在但是,您不能在SQL查询中使用该列表,因为它将生成无效语法:
您的方法在以下几个方面存在缺陷:
CAST
调用中,这将失败因此,您可能还需要阅读SQL语法,并在尝试通过python插入值之前生成一个示例查询。在
它可能看起来像这样(未经测试-小心使用):
结果是:
相关问题 更多 >
编程相关推荐