L'art de gérer des requêtes complexes avec Python ORM

王林
Libérer: 2024-03-18 09:19:02
avant
1199 Les gens l'ont consulté

Python ORM 处理复杂查询的艺术

python Mappage relationnel d'objets (ORM) Framework mappe de manière transparente les données des bases de données relationnelles aux objets Python, simplifiant ainsi l'interaction avec les bases de données. Même les requêtes les plus complexes peuvent être exécutées facilement et efficacement avec un ORM.

1. Requête imbriquée :

Les requêtes imbriquées permettent d'utiliser les résultats d'une requête comme entrée dans une autre requête. Dans un ORM, cela peut être réalisé en utilisant des filtres imbriqués. Par exemple, vous pouvez utiliser la méthode filter() pour imbriquer une sous-requête afin de rechercher des enregistrements correspondant à des critères spécifiques.

Exemple :

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")
))
Copier après la connexion

2. Requête de participation :

Les requêtes de jointure combinent les enregistrements de plusieurs tables. Dans l'ORM, cela peut être fait en joignant deux tables en utilisant la méthode join() 方法来实现。例如,可以通过使用 join() pour trouver des livres avec un auteur spécifique.

Exemple :

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")
Copier après la connexion

3. Fonction d'agrégation :

Les fonctions d'agrégation combinent plusieurs valeurs en une seule valeur, comme la somme, la moyenne ou la recherche de la valeur maximale. Dans un ORM, cela peut être fait en utilisant une fonction telle que sum()avg()max() 等聚合函数来实现。例如,可以使用 sum() pour compter le nombre total de livres d'un auteur spécifique.

Exemple :

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)
Copier après la connexion

4. Requête dynamique :

Les requêtes dynamiques permettent de construire des requêtes au moment de l'exécution. Dans l'ORM, cela peut être fait en utilisant la fonction dynamic() 函数来实现。例如,可以使用 dynamic() pour créer une requête contenant des critères de filtre spécifiques.

Exemple :

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")
))
Copier après la connexion

En utilisant efficacement ces fonctionnalités d'ORM, les développeurs peuvent créer des requêtes complexes et efficaces sans écrire directement des instructions SQL. Cela simplifie l’interaction avec la base de données et améliore la lisibilité et la maintenabilité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:lsjlt.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!