SQLite文档指定在DB中存储日期时间值的首选格式是使用Julian Day(使用内置函数).
但是,我在python(pysqlite,SQLAlchemy)中看到的所有框架都将datetime.datetime
值存储为ISO格式的字符串.他们为什么这样做?
我通常会尝试调整框架以将日期时间存储为julianday,这非常痛苦.我开始怀疑这是值得的.
请与我分享您在这个领域的经验.坚持julianday有意义吗?
Julian Day对于各种日期计算都很方便,但它可以正确地存储时间部分(精确的小时,分钟和秒).在过去,我使用了Julian Day字段(用于日期)和来自Epoch的秒(用于datetime
实例),但仅在我有特定的计算需求时(日期和时间).我认为,ISO格式的日期和日期时间的简单性应该使它们成为首选,比如大约97%的时间.
两种方式存储.框架可以按照自己的方式进行设置,如果您希望找到带有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扩展来执行所需的功能.这样,除了加载扩展程序之外,您不需要触摸框架.