訪問查詢結果
一旦有了查詢,你可以用它做更多的事情,而不僅僅是在 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
,則仍會引發異常。