以下是模型:

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

我想在两个日期之间进行筛选,例如 Select 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

我知道这是不正确的,但如何做到正确呢?

推荐答案

事实上,您的查询是正确的,除了输入错误:您的过滤器排除了所有记录:您应该将<=改为>=,反之亦然:

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相关问答推荐

具有2个共享列的两个表的Amazon RSQL合并

SQL使最终结果显示两个表后的所有数据(匹配和不匹配)?

有没有办法用SQL编写一条CASE语句,如果列A&>0,那么列B,列C=0

如何在不更改S代码的情况下,判断存储过程调用了多少次clr函数?

将重复的值更新为下一个空闲数字

值对于类型字符来说太长

找到最新的连线

如何将`now()`作为SQL插入语句的一部分?

在SQL GROUP BY中的某些行之后执行计算

来自按PostgreSQL分组的最小日期

使用递归CTE在BigQuery中获取文件路径

使用特定的Order By子句随机化SQL输出

日期逻辑(查找过go 90 天内的第一个匹配行)

在SQL中实现表格数据透视类型报表

检索具有相同位置的最小和最大store 数量

使用其他表 SUM 的交换价格转换价格并获得 AVG

使用 GROUP BY 时如何创建其他组?

如何在 RavenDB Studio (RQL) 中插入更新文档

如何根据 Amazon Athena 中的多个列值删除重复行?

SQL 计数和过滤查询优化