sqlite python将当前的时间戳检索为datetime obj

2024-05-07 15:37:42 发布

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

我正在使用一个本地sqlite数据库对应用程序中的元数据进行脱机处理,元数据包括时间戳。在

我有一张桌子声明如下:

CREATE TABLE if not exists tbl_dbsync_meta (
             maindb_last_checked TIMESTAMP,
             global_scores_last_checked TIMESTAMP,
             localscores_syncup_last_checked TIMESTAMP)

现在,我曾经从sqlite检索CURRENT_TIMESTAMP以及上面所有其他时间戳,这样就可以自然地计算出Now和所有其他时间戳之间的时间差异。在

^{pr2}$

现在的问题是,在Python中,所有其他字段都作为“datetime”对象正确检索。但是CURRENT_TIMESTAMP作为字符串返回。在

我试着铸造CURRENT_TIMESTAMP

SELECT CAST(CURRENT_TIMESTAMP AS TIMESTAMP), * FROM tbl_dbsync_meta

但现在返回的是整数,返回的是年份(2012)。在

对于我来说,解决这个问题的一个简单方法是直接SELECT时间与sqlite本身不同,而不是将它们检索到python中,然后再到处玩。另一个选择是使用CURRENT_TIMESTAMP返回的字符串,在Python中将其转换为“datetime”并使用它。在

不过,我需要了解CURRENT_TIMESTAMP(cast或其他)与其他TIMESTAMP字段之间的区别是什么。看来这不起作用是不对的。在

谢谢你的帮助。在

注:请注意,我从来没有将Python datettime对象直接存储到SQLite中。任何时候我需要更新这个表,我只要SET global_scores_last_checked = CURRENT_TIMESTAMP。我只在必要时将日期从SQLite检索到Python中。在


Tags: 数据对象字符串sqlitedatetime时间currentglobal
1条回答
网友
1楼 · 发布于 2024-05-07 15:37:42

连接时需要设置PARSE_COLNAMES

sqlite3.connect(':memory:', detect_types=sqlite3.PARSE_COLNAMES)

然后,以下操作将起作用:

select current_timestamp as 'ts [timestamp]'

这将返回"2012-08-07 13:20:42" (<type 'datetime.datetime'>)。在

CAST不起作用(很可能是一个bug),CURRENT_TIMESTAMP确实没有返回datetime类型,这可能是一个bug,或者是一个特性(请记住,Sqlite没有日期/时间类型的概念,它将它们存储为TEXT/REAL/INTEGER)。在

相关问题 更多 >