J'ai trois tables (utilisateurs, articles et balises) définies dans SQLAlchemy et mappées avec orm.mapper(). Comme vous pouvez le voir ci-dessous, j'ajoute une propriété "auteur" à chaque article qui lie cet article à l'utilisateur qui l'a créé.Récupération des propriétés ORM avec SQLAlchemy
orm.mapper(User, t_users)
orm.mapper(Tag, t_tags)
orm.mapper(Article, t_articles, properties={
'author' : orm.relation(User),
'tags' : orm.relation(Tag, secondary=t_tags_articles),
})
Je liste un index d'articles, et chaque article devra montrer ses étiquettes et son auteur. J'essaie de trouver le meilleur moyen (requêtes SQL minimales, meilleures performances) pour récupérer les données de l'auteur et des tags.
Si je fais ceci:
results = Session.query(Article).all()
alors je peux tirer l'auteur et des étiquettes pour chaque article dans l'indice comme celui-ci:
author = results[0].author
tags = results[0].tags
mais gère deux nouvelles requêtes pour chaque résultat [ x] que je boucle (yikes). Si je fais ceci:
results = Session.query(Article, User).join('author').all()
alors je peux accéder aux données de l'auteur comme celui-ci (parce qu'il est entré dans):
firstname = results[0].firstname
mais en essayant d'obtenir une liste des balises ne fonctionne pas, et au lieu soulève un AttributeError (objet « » rowTuple n'a pas d'attribut « tags »):
tags = results[0].tags
Qu'est-ce que je fais mal, et ce qui est la meilleure façon d'accéder aux données pour cet indice?
Merci. C'est exactement ce dont j'avais besoin. – Travis