【问题标题】:Comparing Dates in Flask-SQLAlchemy在 Flask-SQLAlchemy 中比较日期
【发布时间】:2021-01-06 14:05:38
【问题描述】:

我一直在尝试比较提供给 SQLALchemy 的查询中的日期,如下所示:

start = time.strptime(start, "%d%m%y")
end = time.strptime(end, "%d%m%y")
list_ideas = Idea.query.filter(time >= start, time <= end).all()

但是,无论给定日期如何(Idea.time = db.Column(db.DateTime, default=db.func.now())),这都不会返回结果。我已经搜索了有关此主题的其他一些答案,并且从我收集的内容来看,我没有犯同样的错误。

此外,将查询更改为Idea.query.filter(time &gt;= start, time &lt;= end, deleted=False).all() 会出现错误:

TypeError: filter() 得到了一个意外的关键字参数“已删除”

任何指针将不胜感激。

--
编辑:我注意到我使用的是import time,这可能导致了错误。但是,将其更改为from time import strptime后,我现在遇到了错误:

NameError:未定义全局名称“时间”

【问题讨论】:

  • 试试这个? Idea.query.filter(Idea.time &gt;= start, Idea.time &lt;= end).all()
  • @AlexanderChen 这给出了错误“StatementError:SQLite DateTime 类型只接受 Python 日期时间和日期对象作为输入。(原始原因:TypeError:SQLite 日期时间类型只接受 Python 日期时间和日期对象作为输入。) u'SELECT idea.id AS idea_id, idea.user_id AS idea_user_id,idea.title AS idea_title,idea.edited ASidea_edited,idea.time ASidea_time,idea.post ASidea_post,idea.category ASidea_category,idea.deleted ASidea_deleted , idea.votes AS idea_votes \nFROM idea \nWHERE idea.time >= ? AND idea.time
  • 好的,现在试试这个:from datetime import datetimedatetime.strptime(start, "%d%m%y") 用于开始和结束(以及以上)。
  • @AlexanderChen 解决了,谢谢!

标签: python flask flask-sqlalchemy


【解决方案1】:

尝试使用日期时间模块

from datetime import datetime

Idea.query.filter(Idea.time >= datetime.strptime(start, '%Y-%m-%d'),
                  Idea.time <= datetime.strptime(end, '%Y-%m-%d')).all()

您只需要更改模式以匹配您使用的任何格式

【讨论】:

    【解决方案2】:

    尝试使用 func.DATE() 函数:

    from sqlalchemy import func
    
    start = time.strptime(start, "%d%m%y")
    end = time.strptime(end, "%d%m%y")
    list_ideas = Idea.query.filter(func.DATE(time) >= start, func.DATE(time) <= end).all()
    

    参考类似的issue

    【讨论】:

      猜你喜欢
      • 2019-12-10
      • 1970-01-01
      • 2021-02-11
      • 2013-04-20
      • 1970-01-01
      • 2019-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多