查詢操作
查詢子句使用session
的.query()
方法來獲取Query
查詢對象。查詢對象能夠使用一些方法來對應一些查詢子句,比如.order_by()
,.limit()
,.filter()
等。
查詢對象有這么幾種方法.one()
,.all()
,.scalar()
,.one_or_none()
,.get()
,以及.first()
等。
下面對這幾個方法的用法及效果做簡單解釋。
all()
返回查詢到的所有的結果。這個方法比較危險的地方是,如果數據量大且沒有使用limit
子句限制的話,所有的結果都會加載到內存中。它返回的是一個列表,如果查詢不到任何結果,返回的是空列表。first()
返回查詢到的第一個結果,如果沒有查詢到結果,返回None
。.scalar()
這個方法與.one_or_none()
的效果一樣。 如果查詢到很多結果,拋出sqlalchemy.orm.exc.MultipleResultsFound
異常。如果只有一個結果,返回它,沒有結果返回None
。one()
如果只能查詢到一個結果,返回它,否則拋出異常。沒有結果時拋sqlalchemy.orm.exc.NoResultFound
,有超過一個結果時拋sqlalchemy.orm.exc.MultipleResultsFound
。one_or_none()
比起one()
來,區別只是查詢不到任何結果時不再拋出異常而是返回None
。get()
這是個比較特殊的方法。它用於根據主鍵來返回查詢結果,因此它有個參數就是要查詢的對象的主鍵。如果沒有該主鍵的結果返回None
,否則返回這個結果。
# 查詢所有的User對象 session.query(User).all() # 查詢按照主鍵升序排序后的第一個User對象 session.query(User).order_by(User.id.asc()).first() # 查詢指定user_id為主鍵的對象 session.query(User).get(user_id) session.query(User).filter(User.id == user_id).scalar() session.query(User).filter(User.id == user_id).one_or_none() session.query(User).filter(User.id == user_id).one() # 如果查詢不到會拋出異常,前面三個查詢不到只是返回None
參考:
1、http://jzqt.github.io/2015/12/29/SQLAlchemy筆記/