加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sqlite – python将CURRENT_TIMESTAMP检索为datetime对象

发布时间:2020-12-12 18:54:11 所属栏目:百科 来源:网络整理
导读:我正在使用本地sqlite数据库在我的应用程序中进行元数据的离线处理,元数据包括时间戳. 我有一个声明如下的表: CREATE TABLE if not exists tbl_dbsync_meta ( maindb_last_checked TIMESTAMP,global_scores_last_checked TIMESTAMP,localscores_syncup_last
我正在使用本地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中的“datetime”对象.但是,CURRENT_TIMESTAMP将作为字符串返回.

我尝试过投射CURRENT_TIMESTAMP:

SELECT CAST(CURRENT_TIMESTAMP AS TIMESTAMP),* FROM tbl_dbsync_meta

但现在它作为INTEGER返回,所有返回的是2012年(2012年).

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

但是,我需要了解CURRENT_TIMESTAMP(强制转换或其他)与其他TIMESTAMP字段之间的区别是什么.这似乎不对,这不起作用.

谢谢你的帮助.

P.S:请注意,我从不将Python datettime对象直接存储到SQLite中.无论何时我需要更新此表,我只需设置global_scores_last_checked = CURRENT_TIMESTAMP.我只需要将SQLite中的日期检索到Python中.

解决方法

连接时需要设置PARSE_COLNAMES:

sqlite3.connect(‘:memory:’,detect_types = sqlite3.PARSE_COLNAMES)

然后以下将工作:

选择current_timestamp为’ts [timestamp]’

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

CAST不起作用(很可能是一个bug),CURRENT_TIMESTAMP确实没有返回日期时间类型,这可能是一个bug或一个功能(记住,Sqlite没有日期/时间类型的概念,它将它们存储为TEXT / REAL /整数).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读