【发布时间】:2012-08-04 03:19:16
【问题描述】:
我正在使用本地 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 以及上述所有其他时间戳,以便 - 自然地 - 找出现在与所有这些其他时间戳之间的时间差异。
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 字段之间的区别是什么。这不起作用似乎是错误的。
感谢您的帮助。
P.S:请注意,我从不将 Python 日期时间对象直接存储到 SQLite 中。每当我需要更新此表时,我只需 SET global_scores_last_checked = CURRENT_TIMESTAMP。我只是出于必要才将 SQLite 中的日期检索到 Python 中。
【问题讨论】:
-
我有
detect_types=sqlite3.PARSE_DECLTYPES设置 btw -
这似乎是一般的“功能”问题。我试过这个 - 从 tbl_dbsync_meta 中选择(CURRENT_TIMESTAMP - maindb_last_checked)。这也给我返回了一个 unicode 字符串,而不是一个 DATETIME 对象。而如果我只选择一个现有的 TIMESTAMP 字段 - 例如“maindb_last_checked” - 它会返回一个日期时间对象.......这是问题吗?
-
您是如何将 Python
datetime对象存储到时间戳列中的?他们是如何转变的?请也发布一些 Python 代码。 -
@Tichodroma,这是一个很好的问题。我实际上并没有将 Python 日期时间对象直接存储到 sqlite 中。我所做的只是用“UPDATE tbl_dbsync_meta SET global_scores_last_checked = CURRENT_TIMESTAMP”来更新这些时间戳。所以日期时间值都是 SQLite 内部的。
标签: python datetime sqlite timestamp