查詢操做git
查詢子句使用session
的.query()
方法來獲取Query
查詢對象。查詢對象可以使用一些方法來對應一些查詢子句,好比.order_by()
,.limit()
,.filter()
等。github
查詢對象有這麼幾種方法.one()
,.all()
,.scalar()
,.one_or_none()
,.get()
,以及.first()
等。
下面對這幾個方法的用法及效果作簡單解釋。sql
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
參考:session
一、http://jzqt.github.io/2015/12/29/SQLAlchemy筆記/spa