您的位置:首頁>新金融 >

提高代碼質量,掌握SQLAlchemy查詢過濾、排序、分組和聚合_天天熱文

來源:今日頭條  

SQLAlchemy是Python中最流行的ORM(對象關系映射)庫之一。它允許開發人員使用Python語言來操作數據庫,而無需編寫SQL語句。本文將講解SQLAlchemy中的查詢語言基礎、基礎查詢、查詢過濾、排序、分組和聚合、連接和子查詢。


【資料圖】

查詢語言基礎

SQLAlchemy的查詢語言基于SQL語言。SQL是一種用于管理關系型數據庫的語言。關系型數據庫是一種基于表格的數據庫,其中數據被組織成多個表格,并使用鍵來鏈接它們。SQL是用于在這些表格中執行操作的語言,如查詢、插入、更新和刪除。

SQLAlchemy的查詢語言是通過SQLAlchemy的查詢構建器來實現的。查詢構建器是一種將SQLAlchemy查詢定義為Python對象的方式。它允許開發人員使用Python來構建查詢,而無需編寫SQL語句。

基礎查詢

SQLAlchemy的基礎查詢使用session.query()方法。該方法接受一個模型作為參數,并返回一個查詢構建器對象。例如:

from sqlalchemy.orm import sessionmakerfrom myapp.models import UserSession = sessionmaker(bind=engine)session = Session()query = session.query(User)

上述代碼將創建一個名為query的查詢構建器對象,用于查詢User模型中的所有記錄。

查詢構建器對象可以用于過濾記錄、排序記錄、分組和聚合記錄、連接和子查詢等操作。

查詢過濾

查詢過濾是通過filter()方法實現的。該方法接受一個條件表達式作為參數,并返回一個新的查詢構建器對象,該對象包含滿足條件的記錄。例如:

from sqlalchemy.orm import sessionmakerfrom myapp.models import UserSession = sessionmaker(bind=engine)session = Session()query = session.query(User).filter(User.name == "John")

上述代碼將創建一個名為query的查詢構建器對象,用于查詢User模型中名字為"John"的記錄。

查詢過濾支持多個條件表達式的組合,例如:

from sqlalchemy.orm import sessionmakerfrom myapp.models import UserSession = sessionmaker(bind=engine)session = Session()query = session.query(User).filter(User.age > 30, User.city == "New York")

上述代碼將創建一個名為query的查詢構建器對象,用于查詢User模型中年齡大于30且所在城市為"New York"的記錄。

排序

查詢排序是通過order_by()方法實現的。該方法接受一個列名作為參數,并返回一個新的查詢構建器對象,該對象包含按指定列排序后的記錄。例如:

from sqlalchemy.orm import sessionmakerfrom myapp.models import UserSession = sessionmaker(bind=engine)session = Session()query = session.query(User).order_by(User.name)

上述代碼將創建一個名為query的查詢構建器對象,用于查詢`User`模型中的所有記錄,并按照名字升序排序。

可以使用多個order_by()方法來進行多列排序,例如:

from sqlalchemy.orm import sessionmakerfrom myapp.models import UserSession = sessionmaker(bind=engine)session = Session()query = session.query(User).order_by(User.age.desc(), User.name.asc())

上述代碼將創建一個名為query的查詢構建器對象,用于查詢User模型中的所有記錄,并按照年齡降序排序,如果年齡相同則按照名字升序排序。

分組和聚合

查詢分組和聚合是通過group_by()和func模塊中的聚合函數實現的。group_by()方法接受一個列名作為參數,并返回一個新的查詢構建器對象,該對象按指定列進行分組。聚合函數可以對每個分組進行聚合操作,例如求和、計數、平均值等。

例如,下面的代碼將查詢User模型中每個城市的人口數量:

from sqlalchemy.orm import sessionmakerfrom sqlalchemy import funcfrom myapp.models import UserSession = sessionmaker(bind=engine)session = Session()query = session.query(User.city, func.count(User.id)).group_by(User.city)

上述代碼將創建一個名為query的查詢構建器對象,用于查詢User模型中每個城市的人口數量。func.count()函數用于計算每個城市的人口數量,group_by()方法用于按照城市分組。

連接和子查詢

查詢連接和子查詢是通過join()方法和子查詢實現的。join()方法用于在查詢中加入其他模型的數據,而子查詢則用于在查詢中加入其他查詢的結果。

例如,下面的代碼將查詢User模型和Order模型中的數據,并且只返回購買過商品編號為100的用戶:

from sqlalchemy.orm import sessionmakerfrom myapp.models import User, OrderSession = sessionmaker(bind=engine)session = Session()query = session.query(User).join(Order).filter(Order.product_id == 100)

上述代碼將創建一個名為query的查詢構建器對象,用于查詢購買過商品編號為100的用戶。join()方法用于將User模型和Order模型連接起來,filter()方法用于過濾購買過商品編號為100的訂單。

子查詢可以使用subquery()方法創建,并且可以在主查詢中使用。例如,下面的代碼將查詢User模型中購買過商品編號為100的用戶:

from sqlalchemy.orm import sessionmakerfrom sqlalchemy import selectfrom myapp.models import User, OrderSession = sessionmaker(bind=engine)session = Session()sub_query = session.query(Order.user_id).filter(Order.product_id == 100).subquery()query = session.query(User).filter(User.id.in_(sub_query))

上述代碼將創建一個名為sub_query的子查詢,用于查詢購買過商品編號為100的用戶的ID。in_()方法用于在主查詢中過濾User模型中包含這些用戶的記錄。

總結一下,通過使用join()方法和子查詢,我們可以輕松地實現多表查詢和復雜查詢。

結語

SQLAlchemy是一個強大的ORM框架,提供了豐富的查詢API,可以方便地進行數據查詢和操作。在實際應用中,我們通常需要使用到查詢語言基礎、基礎查詢、查詢過濾、排序、分組和聚合、連接和子查詢等查詢功能,通過對這些查詢功能的學習和掌握,可以幫助我們更加靈活地使用SQLAlchemy進行數據查詢和操作,提高開發效率和代碼質量。

關鍵詞:

最新文章
国产乱人伦精品一区二区,国产在线麻豆精品观看,国产在线播精品第三,亚洲欧美国产制服动漫
>