SQLAlchemy的查詢操做Query

查詢操做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

相關文章
相關標籤/搜索