SQLAlchemy的查詢操作Query


查詢操作

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM