访问查询结果
一旦有了查询,你可以用它做更多的事情,而不仅仅是在 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
,则仍会引发异常。