Maison >base de données >tutoriel mysql >Comment joindre efficacement plusieurs tables dans SQLAlchemy avec une seule requête ?

Comment joindre efficacement plusieurs tables dans SQLAlchemy avec une seule requête ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-05 00:09:41766parcourir

How to Efficiently Join Multiple Tables in SQLAlchemy with a Single Query?

Joindre plusieurs tables dans SQLAlchemy à l'aide d'une seule requête

SQLAlchemy permet une récupération efficace des données en joignant plusieurs tables avec une seule requête. Pour joindre plusieurs tables, cela nécessite de définir des relations entre les classes représentant les tables de votre base de données.

Dans votre cas, vous disposez de trois classes : User, Document et DocumentsPermissions. Établissons des relations entre ces classes :

class User(Base):
    __tablename__ = 'users'
    email = Column(String, primary_key=True)
    name = Column(String)

class Document(Base):
    __tablename__ = "documents"
    name = Column(String, primary_key=True)
    author = Column(String, ForeignKey("users.email"), nullable=False)

class DocumentsPermissions(Base):
    __tablename__ = "documents_permissions"
    readAllowed = Column(Boolean)
    writeAllowed = Column(Boolean)

    document = Column(String, ForeignKey("documents.name"), nullable=False)

Avec ces relations, vous pouvez récupérer la table souhaitée à l'aide d'une seule requête :

query = session.query(User, Document, DocumentsPermissions) \
    .filter(User.email == Document.author) \
    .filter(Document.name == DocumentsPermissions.document) \
    .filter(User.email == "[email protected]") \
    .all()

Cette requête rejoint les tables User, Document et DocumentsPermissions par leurs relations et filtre les résultats en fonction du courrier électronique. Le résultat final sera une liste de tuples contenant les données des trois tables, comme vous l'avez décrit. En utilisant cette méthode, vous pouvez récupérer efficacement les données de plusieurs tables avec une seule requête de base de données.

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:
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