來源:今日頭條
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進行數據查詢和操作,提高開發效率和代碼質量。
關鍵詞:
京糧控股:5月26日召開業績說明會,投資者參與-全球報資訊
2023年5月29日京糧控股(000505)發布公告稱公司于2023年5月26日召開業績說明會。
觀察:大熊貓“丫丫”平安回到北京動物園,健康狀況穩定
新華社北京5月29日電(記者嚴賦憬、楊淑君)記者從國家林草局獲悉,在有關部門和京滬兩地各方的高度重視和
5月29日生意社MIBK基準價為12166.67元/噸 今日熱文
5月29日,生意社MIBK基準價為12166 67元 噸,與本月初(11783 33元 噸)相比,上漲了3 25%。MIBK年度統計(2022-05-29--
補壹刀:庫列巴替中國辟謠的一個細節,非同尋常!
補壹刀:庫列巴替中國辟謠的一個細節,非同尋常!,烏方,美歐,伊朗,庫列巴,烏克蘭,俄羅斯,補壹刀
全球受監管開放式共同基金規模猛縮水76萬億元
日前,美國投資公司協會(ICI)發布2022年度報告顯示,截至2022年底,全球受監管的開放式共同基金(對應到