访问查询结果

一旦有了查询,你可以用它做更多的事情,而不仅仅是在 for 循环中迭代结果。

建立:

from datetime import date

class User(Base):
    __tablename__ = 'users'

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

# Find users who are older than a cutoff.
query = session.query(User).filter(User.birthday < date(1995, 3, 3))

要将结果作为列表返回,请使用 all()

reslist = query.all() # all results loaded in memory
nrows = len(reslist)

你可以使用 count() 获取计数:

nrows = query.count()

要获得第一个结果,请使用 first()。这与 order_by() 结合使用最为有用。

oldest_user = query.order_by(User.birthday).first()

对于只返回一行的查询,请使用 one()

bob = session.query(User).filter(User.name == 'Bob').one()

如果查询返回多行或者返回 none,则会引发异常。如果该行可能尚不存在,请使用 one_or_none()

bob = session.query(User).filter(User.name == 'Bob').one_or_none()
if bob is None:
    create_bob()

如果多行的名称为 Bob,则仍会引发异常。