【问题标题】:How could i get the sqlite date delta in SQLAlchemy我如何在 SQLAlchemy 中获取 sqlite 日期增量
【发布时间】:2013-05-03 01:48:28
【问题描述】:

我有一个 sqlite 表,其中包含 INTEGER 类型的 final_date 列(用作日期)。我想计算从该列到现在的天数。在 sqlite 中,我可以在函数 (julianday) 的帮助下运行 SQL,如下所示。

select (julianday(final_date) - julianday('now')) AS days from bond where days > 0
109.407374872826
482.407374872826
488.407374872826
....

但是,在 SQLAlchemy 中,以下代码无法获得准确的天数。

今天 = datetime.today().date()

查询 = session.query( Bond.final_date - 今天 )

我想知道是否有一种有效的方法可以将函数 julianday 应用于 SQLAlchemy 代码,或者 SQLAlchemy 中是否有替代的本机方法来完成此操作。

【问题讨论】:

  • 请提供更多信息 - 请提供存储为 INTEGER 的两个示例日期。这将有助于了解日期如何准确存储为 INTEGER?是纪元之后的几秒钟吗?还是 YYYYMMDD?还是别的什么?

标签: sqlite sqlalchemy


【解决方案1】:

如果您可以控制数据库和数据 - 您可能需要更新架构以将列定义为 sqlalchemy.types.DateTime。使用datetime 模块进行日期计算。

或者您可以使用sqlalchemy.sql.func 访问 julianday() sqlite 函数。

from sqlalchemy.sql import func
q = session.query( func.julianday( Bond.final_date) - func.julianday("now"))
for row in q.all():
    print row[0]

请注意,第二种方法使用 sqlite 特定功能,不适用于其他数据库系统。

【讨论】:

  • 谢谢。它真的很有帮助并回答了我的问题。
猜你喜欢
  • 2013-08-10
  • 2019-12-10
  • 1970-01-01
  • 2021-04-06
  • 2019-10-05
  • 2013-04-20
  • 2010-11-26
  • 2018-09-25
  • 2019-10-30
相关资源
最近更新 更多