王林
Freigeben: 2024-03-18 09:19:02
nach vorne
1239 Leute haben es durchsucht

Python ORM 处理复杂查询的艺术

python Object Relational Mapping (ORM) Framework ordnet Daten in relationalen Datenbanken nahtlos Python-Objekten zu und vereinfacht so die Interaktion mit Datenbanken. Selbst die komplexesten Abfragen können mit einem ORM einfach und effizient ausgeführt werden.

1. Verschachtelte Abfrage:

Verschachtelte Abfragen ermöglichen die Verwendung der Ergebnisse einer Abfrage als Eingabe für eine andere Abfrage. In einem ORM kann dies durch die Verwendung verschachtelter Filter erreicht werden. Sie können beispielsweise die Methode filter() verwenden, um eine Unterabfrage zu verschachteln, um Datensätze zu finden, die bestimmten Kriterien entsprechen.

Beispiel:

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")
))
Nach dem Login kopieren

2. Beitrittsanfrage:

Join-Abfragen kombinieren Datensätze aus mehreren Tabellen. Im ORM kann dies durch die Verknüpfung zweier Tabellen mit der join() 方法来实现。例如,可以通过使用 join()-Methode erreicht werden, um Bücher mit einem bestimmten Autor zu finden.

Beispiel:

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")
Nach dem Login kopieren

3. Aggregationsfunktion:

Aggregationsfunktionen kombinieren mehrere Werte zu einem einzigen Wert, z. B. Summieren, Mitteln oder Ermitteln des Maximalwerts. In einem ORM kann dies durch die Verwendung einer Funktion wie sum()avg()max() 等聚合函数来实现。例如,可以使用 sum() erfolgen, um die Gesamtzahl der Bücher eines bestimmten Autors zu zählen.

Beispiel:

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)
Nach dem Login kopieren

4. Dynamische Abfrage:

Dynamische Abfragen ermöglichen die Erstellung von Abfragen zur Laufzeit. Im ORM kann dies erreicht werden, indem die Funktion dynamic() 函数来实现。例如,可以使用 dynamic() verwendet wird, um eine Abfrage mit bestimmten Filterkriterien zu erstellen.

Beispiel:

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")
))
Nach dem Login kopieren

Durch die effektive Nutzung dieser ORM-Funktionen können Entwicklerkomplexe und effiziente Abfragen erstellen, ohne SQL-Anweisungen direkt schreiben zu müssen. Dies vereinfacht die Datenbankinteraktion und verbessert die Lesbarkeit und Wartbarkeit.

Das obige ist der detaillierte Inhalt von. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:lsjlt.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage