搜尋
首頁後端開發Python教學Python ORM 處理複雜查詢的藝術

Python ORM 處理複雜查詢的藝術

Mar 18, 2024 am 09:19 AM
python程式設計聚合函數

Python ORM 处理复杂查询的艺术

python 物件關係映射(ORM) 框架可將關係資料庫中的資料無縫地映射到Python 對象,從而簡化與資料庫的交互。即使是最複雜的查詢,也能透過 ORM 輕鬆有效地執行。

1. 巢狀查詢:

巢狀查詢允許將一個查詢的結果作為另一個查詢的輸入。在 ORM 中,這可以透過使用嵌套過濾器來實現。例如,可以使用 filter() 方法巢狀一個子查詢,以尋找與特定條件相符的記錄。

範例:

from sqlalchemy import and_, Column
from sqlalchemy.orm import sessionmaker, relationship

# 建立一個 ORM Session
Session = sessionmaker()
session = Session()

# Book 表和 Author 表
class Book(Base):
id = Column(Integer, primary_key=True)
title = Column(String)
author_id = Column(Integer, ForeignKey("authors.id"))

# Author 表
class Author(Base):
id = Column(Integer, primary_key=True)
name = Column(String)

# 使用巢狀查詢尋找所有作者姓名為 "John" 的書籍標題
query = session.query(Book.title).filter(Book.author_id.in_(
session.query(Author.id).filter(Author.name == "John")
))

2. 聯結查詢:

聯接查詢將多個表中的記錄組合在一起。在 ORM 中,這可以透過使用 join() 方法來實現。例如,可以透過使用 join() 方法連接兩個表,以尋找具有特定作者的書籍。

範例:

from sqlalchemy import and_, Column
from sqlalchemy.orm import sessionmaker, relationship

# 建立一個 ORM Session
Session = sessionmaker()
session = Session()

# Book 表和 Author 表
class Book(Base):
id = Column(Integer, primary_key=True)
title = Column(String)
author_id = Column(Integer, ForeignKey("authors.id"))

# Author 表
class Author(Base):
id = Column(Integer, primary_key=True)
name = Column(String)

# 使用聯結查詢尋找所有作者姓名為 "John" 的書名
query = session.query(Book.title).join(Book.author).filter(Author.name == "John")

3. 聚合函數:

聚合函數可將多個值組合成單一值,例如求和、求平均值或找出最大值。在 ORM 中,這可以透過使用諸如 sum()avg()max() 等聚合函數來實現。例如,可以使用 sum() 函數來計算特定作者的書籍總數。

範例:

from sqlalchemy import and_, Column
from sqlalchemy.orm import sessionmaker, relationship

# 建立一個 ORM Session
Session = sessionmaker()
session = Session()

# Book 表和 Author 表
class Book(Base):
id = Column(Integer, primary_key=True)
title = Column(String)
author_id = Column(Integer, ForeignKey("authors.id"))

# Author 表
class Author(Base):
id = Column(Integer, primary_key=True)
name = Column(String)

# 使用聚合函數計算特定作者的書籍總數
query = session.query(Author.name).group_by(Author).having(func.count(Book.id) > 1)

4. 動態查詢:

動態查詢允許在執行時間建立查詢。在 ORM 中,這可以透過使用 dynamic() 函數來實現。例如,可以使用 dynamic() 函數來建立一個包含特定過濾條件的查詢。

範例:

from sqlalchemy import and_, Column, literal
from sqlalchemy.orm import sessionmaker, relationship

# 建立一個 ORM Session
Session = sessionmaker()
session = Session()

# Book 表和 Author 表
class Book(Base):
id = Column(Integer, primary_key=True)
title = Column(String)
author_id = Column(Integer, ForeignKey("authors.id"))

# Author 表
class Author(Base):
id = Column(Integer, primary_key=True)
name = Column(String)

# 使用動態查詢建立一個包含特定篩選條件的查詢
query = session.query(Book).filter(literal(True).in_(
session.query(1).filter(Book.title == "Book Title")
))

透過有效利用 ORM 的這些特性,開發人員可以建立複雜的高效查詢,而無需直接編寫 SQL 語句。這簡化了資料庫交互,提高了可讀性和可維護性。

以上是Python ORM 處理複雜查詢的藝術的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:编程网。如有侵權,請聯絡admin@php.cn刪除
在Python陣列上可以執行哪些常見操作?在Python陣列上可以執行哪些常見操作?Apr 26, 2025 am 12:22 AM

Pythonarrayssupportvariousoperations:1)Slicingextractssubsets,2)Appending/Extendingaddselements,3)Insertingplaceselementsatspecificpositions,4)Removingdeleteselements,5)Sorting/Reversingchangesorder,and6)Listcomprehensionscreatenewlistsbasedonexistin

在哪些類型的應用程序中,Numpy數組常用?在哪些類型的應用程序中,Numpy數組常用?Apr 26, 2025 am 12:13 AM

NumPyarraysareessentialforapplicationsrequiringefficientnumericalcomputationsanddatamanipulation.Theyarecrucialindatascience,machinelearning,physics,engineering,andfinanceduetotheirabilitytohandlelarge-scaledataefficiently.Forexample,infinancialanaly

您什麼時候選擇在Python中的列表上使用數組?您什麼時候選擇在Python中的列表上使用數組?Apr 26, 2025 am 12:12 AM

useanArray.ArarayoveralistinpythonwhendeAlingwithHomoGeneData,performance-Caliticalcode,orinterfacingwithccode.1)同質性data:arraysSaveMemorywithTypedElements.2)績效code-performance-calitialcode-calliginal-clitical-clitical-calligation-Critical-Code:Arraysofferferbetterperbetterperperformanceformanceformancefornallancefornalumericalical.3)

所有列表操作是否由數組支持,反之亦然?為什麼或為什麼不呢?所有列表操作是否由數組支持,反之亦然?為什麼或為什麼不呢?Apr 26, 2025 am 12:05 AM

不,notalllistoperationsareSupportedByArrays,andviceversa.1)arraysdonotsupportdynamicoperationslikeappendorinsertwithoutresizing,wheremactsperformance.2)listssdonotguaranteeconecontanttanttanttanttanttanttanttanttanttimecomplecomecomplecomecomecomecomecomecomplecomectacccesslectaccesslecrectaccesslerikearraysodo。

您如何在python列表中訪問元素?您如何在python列表中訪問元素?Apr 26, 2025 am 12:03 AM

toAccesselementsInapythonlist,useIndIndexing,負索引,切片,口頭化。 1)indexingStartSat0.2)否定indexingAccessesessessessesfomtheend.3)slicingextractsportions.4)iterationerationUsistorationUsisturessoreTionsforloopsoreNumeratorseforeporloopsorenumerate.alwaysCheckListListListListlentePtotoVoidToavoIndexIndexIndexIndexIndexIndExerror。

Python的科學計算中如何使用陣列?Python的科學計算中如何使用陣列?Apr 25, 2025 am 12:28 AM

Arraysinpython,尤其是Vianumpy,ArecrucialInsCientificComputingfortheireftheireffertheireffertheirefferthe.1)Heasuedfornumerericalicerationalation,dataAnalysis和Machinelearning.2)Numpy'Simpy'Simpy'simplementIncressionSressirestrionsfasteroperoperoperationspasterationspasterationspasterationspasterationspasterationsthanpythonlists.3)inthanypythonlists.3)andAreseNableAblequick

您如何處理同一系統上的不同Python版本?您如何處理同一系統上的不同Python版本?Apr 25, 2025 am 12:24 AM

你可以通過使用pyenv、venv和Anaconda來管理不同的Python版本。 1)使用pyenv管理多個Python版本:安裝pyenv,設置全局和本地版本。 2)使用venv創建虛擬環境以隔離項目依賴。 3)使用Anaconda管理數據科學項目中的Python版本。 4)保留系統Python用於系統級任務。通過這些工具和策略,你可以有效地管理不同版本的Python,確保項目順利運行。

與標準Python陣列相比,使用Numpy數組的一些優點是什麼?與標準Python陣列相比,使用Numpy數組的一些優點是什麼?Apr 25, 2025 am 12:21 AM

numpyarrayshaveseveraladagesoverandastardandpythonarrays:1)基於基於duetoc的iMplation,2)2)他們的aremoremoremorymorymoremorymoremorymoremorymoremoremory,尤其是WithlargedAtasets和3)效率化,效率化,矢量化函數函數函數函數構成和穩定性構成和穩定性的操作,製造

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用