Maison >base de données >tutoriel mysql >Comment effectuer une seule requête SQLAlchemy joignant plusieurs tables ?

Comment effectuer une seule requête SQLAlchemy joignant plusieurs tables ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-28 17:06:10660parcourir

How to Perform a Single SQLAlchemy Query Joining Multiple Tables?

Joindre plusieurs tables dans SQLAlchemy avec une seule requête

Pour exécuter une opération de jointure complète impliquant plusieurs tables dans SQLAlchemy, il est essentiel de suivre une approche spécifique. Considérez les classes mappées SQLAlchemy fournies :

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"))

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

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

Pour récupérer un résultat dans le format souhaité pour un utilisateur spécifique, suivez ces étapes :

  1. Commencez par interroger les tables nécessaires à l'aide du fonction de requête :
q = Session.query(
    User, Document, DocumentPermissions
)
  1. Établir des relations entre les tables à l'aide du filtre méthode :
q.filter(
    User.email == Document.author
)
  1. Incluez des relations supplémentaires si nécessaire :
q.filter(
    Document.name == DocumentPermissions.document
)
  1. Spécifiez la condition de filtrage en fonction de l'e-mail de l'utilisateur souhaité :
q.filter(
    User.email == 'someemail'
)
  1. Enfin, exécutez la requête en utilisant la méthode all pour récupérer le résultats.

En suivant cette approche, il devient possible de joindre efficacement plusieurs tables à l'aide d'une seule requête SQLAlchemy.

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