过滤

鉴于以下模型

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(Text, nullable=False)
    birthday = Column(Date)

你可以过滤查询中的列:

import datetime as dt
session.query(User).filter(User.name == 'Bob')
session.query(User).filter(User.birthday < dt.date(2000, 1, 1))

对于第一种情况,有一个捷径:

session.query(User).filter_by(name='Bob')

可以通过链接 filter 方法使用 AND 关系组合过滤器:

(session.query(User).filter(User.name.like('B%'))
                    .filter(User.birthday < dt.date(2000, 1, 1)))

或者更灵活地使用重载的按位运算符 &|

session.query(User).filter((User.name == 'Bob') | (User.name == 'George'))

不要忘记处理运算符优先级的内括号。