Maison développement back-end Tutoriel Python L'art de gérer des requêtes complexes avec Python ORM

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

Mar 18, 2024 am 09:19 AM
python 编程 聚合函数

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!

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

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment télécharger Deepseek Xiaomi Comment télécharger Deepseek Xiaomi Feb 19, 2025 pm 05:27 PM

Comment télécharger Deepseek Xiaomi

Google AI annonce Gemini 1.5 Pro et Gemma 2 pour les développeurs Google AI annonce Gemini 1.5 Pro et Gemma 2 pour les développeurs Jul 01, 2024 am 07:22 AM

Google AI annonce Gemini 1.5 Pro et Gemma 2 pour les développeurs

Comment lui demandez-vous Deepseek Comment lui demandez-vous Deepseek Feb 19, 2025 pm 04:42 PM

Comment lui demandez-vous Deepseek

Comment rechercher Deepseek Comment rechercher Deepseek Feb 19, 2025 pm 05:18 PM

Comment rechercher Deepseek

Comment programmer Deepseek Comment programmer Deepseek Feb 19, 2025 pm 05:36 PM

Comment programmer Deepseek

Comment utiliser Deepseek pour régler les comptes Comment utiliser Deepseek pour régler les comptes Feb 19, 2025 pm 04:36 PM

Comment utiliser Deepseek pour régler les comptes

La clé du codage : libérer la puissance de Python pour les débutants La clé du codage : libérer la puissance de Python pour les débutants Oct 11, 2024 pm 12:17 PM

La clé du codage : libérer la puissance de Python pour les débutants

Java Made Simple : un guide du débutant sur la puissance de programmation Java Made Simple : un guide du débutant sur la puissance de programmation Oct 11, 2024 pm 06:30 PM

Java Made Simple : un guide du débutant sur la puissance de programmation

See all articles