4

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

我有一个声明如下的表:

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

现在,在某一时刻,我CURRENT_TIMESTAMP从 sqlite 中检索到上述所有其他时间戳,以便 - 自然地 - 找出现在与所有这些其他时间戳之间的时间差异。

SELECT CURRENT_TIMESTAMP as this_time, * FROM tbl_dbsync_meta

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

我试过铸造CURRENT_TIMESTAMP

SELECT CAST(CURRENT_TIMESTAMP AS TIMESTAMP), * FROM tbl_dbsync_meta

但现在它以 INTEGER 形式返回,返回的只是年份(2012 年)。

我解决这个问题的一个简单方法是直接SELECT从 sqlite 本身获取时间差异,而不是将它们检索到 python 中然后玩弄。另一个选择是我使用返回的字符串CURRENT_TIMESTAMP,在 Python 中将其转换为“日期时间”并使用它。

CURRENT_TIMESTAMP但是我需要了解(演员或其他)与其他TIMESTAMP领域之间的区别是什么。这不起作用似乎是错误的。

谢谢你的帮助。

PS:请注意,我从不将 Python 日期时间对象直接存储到 SQLite 中。每当我需要更新此表时,我只需SET global_scores_last_checked = CURRENT_TIMESTAMP. 出于必要,我只将 SQLite 中的日期检索到 Python 中。

4

1 回答 1

2

连接时需要设置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 不起作用(很可能是一个错误)并且 CURRENT_TIMESTAMP 确实没有返回日期时间类型,这可能是一个错误或一个功能(请记住,Sqlite 没有日期/时间类型的概念,它将它们存储为 TEXT/REAL/整数)。

于 2012-08-07T13:26:53.807 回答