查詢操作
查詢子句使用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筆記/
