我在SQLAlchemy中定义了三个表(users、articles和tags),并用orm.mapper(). 正如您在下面看到的,我为每个文章添加了一个属性“author”,它将文章与创建它的用户联系起来。在
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),
})
我列出了一个文章索引,每一篇文章都需要显示它的标签和作者。我正试图找出检索author和tags数据的最佳方法(最少的SQL查询,更好的性能)。在
如果我这样做:
^{pr2}$然后我可以像这样为索引中的每一篇文章提取作者和标签:
author = results[0].author
tags = results[0].tags
但是这会为我循环的每个结果运行两个新的查询(yikes)。如果我这样做:
results = Session.query(Article, User).join('author').all()
然后我可以像这样访问作者数据(因为它已加入):
firstname = results[0].firstname
但尝试获取标记列表无效,而是引发AttributeError(“rowTuple”对象没有属性“tags”):
tags = results[0].tags
我做错了什么?访问这个索引的数据的最佳方法是什么?在
考虑到了“急切加载”,如Working with Related Objects所述?在
你的加入也很时髦。您将ORM与sqltoolkit混合使用,因此可以获得行对象而不是映射对象。见Querying with Joins
相关问题 更多 >
编程相关推荐