当前位置:  开发笔记 > 编程语言 > 正文

在SQLite中将DateTime数据存储为julianday会不会烦恼?

如何解决《在SQLite中将DateTime数据存储为julianday会不会烦恼?》经验,为你挑选了2个好方法。

SQLite文档指定在DB中存储日期时间值的首选格式是使用Julian Day(使用内置函数).

但是,我在python(pysqlite,SQLAlchemy)中看到的所有框架都将datetime.datetime值存储为ISO格式的字符串.他们为什么这样做?

我通常会尝试调整框架以将日期时间存储为julianday,这非常痛苦.我开始怀疑这是值得的.

请与我分享您在这个领域的经验.坚持julianday有意义吗?



1> Alex Martell..:

Julian Day对于各种日期计算都很方便,但它可以正确地存储时间部分(精确的小时,​​分​​钟和秒).在过去,我使用了Julian Day字段(用于日期)和来自Epoch的秒(用于datetime实例),但仅在我有特定的计算需求时(日期和时间).我认为,ISO格式的日期和日期时间的简单性应该使它们成为首选,比如大约97%的时间.


目前(在1029-09-15和6771-07-07之间),存储为"double"的Julian日期的分辨率为2**( - 31)天≅40.2μs.

2> Samuel Danie..:

两种方式存储.框架可以按照自己的方式进行设置,如果您希望找到带有ISO格式字符串的原始列,那么这可能比它的价值更令人痛苦.

拥有两列的关注点是数据一致性,但sqlite应该拥有使其工作所需的一切.版本3.3支持检查约束和触发器.阅读日期和时间功能.您应该能够在数据库中完全执行您需要的操作.

CREATE TABLE Table1 (jd, isotime);

CREATE TRIGGER trigger_name_1 AFTER INSERT ON Table1
BEGIN
    UPDATE Table1 SET jd = julianday(isotime) WHERE rowid = last_insert_rowid();
END;

CREATE TRIGGER trigger_name_2 AFTER UPDATE OF isotime ON Table1
BEGIN
    UPDATE Table1 SET jd = julianday(isotime) WHERE rowid = old.rowid;
END;

如果您无法在数据库中执行所需操作,则可以编写C扩展来执行所需的功能.这样,除了加载扩展程序之外,您不需要触摸框架.

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有