当前位置: 首页 > 面试题库 >

SQLAlchemy:如何过滤日期字段?

丰赞
2023-03-14
问题内容

这是模型:

class User(Base):
    ...
    birthday = Column(Date, index=True)   #in database it's like '1987-01-17'
    ...

我想在两个日期之间进行过滤,例如选择间隔18-30年的所有用户。

如何用SQLAlchemy实现它?

我想:

query = DBSession.query(User).filter(
    and_(User.birthday >= '1988-01-17', User.birthday <= '1985-01-17')
)

# means age >= 24 and age <= 27

我知道这是不正确的,但是该怎么做正确呢?


问题答案:

实际上,除了错字之外,您的查询是正确的:您的过滤器排除了所有记录:您应该更改<=for >=,反之亦然:

qry = DBSession.query(User).filter(
        and_(User.birthday <= '1988-01-17', User.birthday >= '1985-01-17'))
# or same:
qry = DBSession.query(User).filter(User.birthday <= '1988-01-17').\
        filter(User.birthday >= '1985-01-17')

您也可以使用between

qry = DBSession.query(User).filter(User.birthday.between('1985-01-17', '1988-01-17'))


 类似资料:
  • 问题内容: 如何按字符串长度过滤? 此代码段: 给了我以下错误: 在哪里: 问题答案: 您需要使用SQL函数生成器来创建函数:

  • 问题内容: 有人可以向我解释为什么以下过滤器在月份和日期级别不起作用吗?按年份进行过滤似乎有效,但其他两个方法却无效。 快速更新以演示在创建和处理查询集之前我得到了相同的行为: 这里有更多值得深思的地方: 问题答案: Django文档给出了将时区定义安装到数据库的指令: SQLite:安装-转换实际上是在Python中执行的。 PostgreSQL:无要求(请参阅时区)。 Oracle:无要求(请

  • 问题内容: 我试图过滤与日期比较。我的意思是: 我得到一个空的查询集列表作为答案,因为(我认为)我不在考虑时间,但我希望“任何时间”。 Django中有一种简单的方法吗? 我在datetime中设置了时间,但不是。 问题答案: 这种查找在中实现,具体如下 因为它很冗长,所以有计划使用运算符来改进语法。有关更多详细信息,请检查“ #9596将DateTimeField与日期比较太难 ”。

  • 问题内容: 所以我的代码如下: 我正在做一个测试,看是否可以过滤月份,所以它只显示11月的日期,但这没有用。它给了我以下错误:AttributeError:’Int64Index’对象没有属性’month’。 如果我做 然后我得到类’pandas.tslib.Timestamp’,这使我相信存储在数据框中的对象类型是Timestamp对象。(我不确定之前的错误是“ Int64Index”来自何处)

  • 目前,我已经知道如何从(时间戳)日期字段中筛选日期范围。这是一个简单的问题: 但是,当你对基于时间的范围感兴趣时,如何过滤日期,比如gte:“8:00:00”和lte:“10:00:00”?这有可能吗? 换句话说,我的要求是:如何让所有事件在本月(15-11-01/15-11-30)发生,但只能在上午8:00到10:00之间发生?

  • 问题内容: 有人可以向我解释为什么以下过滤器在月份和日期级别上不起作用吗?按年份进行过滤似乎有效,但其他两个方法却无效。 快速更新以演示在创建和处理查询集之前我得到了相同的行为: 这里有更多值得深思的地方: 问题答案: @SimonWilder完美地回答了为什么它不起作用的问题,这是您可以在不禁用Django中的TZ支持的情况下实际解决它的方法 Django文档给出了将时区定义安装到数据库的指令: