訪問查詢結果

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