【发布时间】:2010-12-30 22:12:29
【问题描述】:
我在 SQLAlchemy 中定义了三个表(用户、文章和标签),并使用 orm.mapper() 进行映射。正如您在下面看到的,我为每篇文章添加了一个属性“作者”,该属性将该文章与创建它的用户联系起来。
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),
})
我正在列出文章索引,每篇文章都需要显示其标签和作者。我正在尝试找出检索作者和标签数据的最佳方法(最少的 SQL 查询,更好的性能)。
如果我这样做:
results = Session.query(Article).all()
然后我可以像这样在索引中提取每篇文章的作者和标签:
author = results[0].author
tags = results[0].tags
但这会为我循环的每个结果[x] 运行两个新查询(哎呀)。如果我这样做:
results = Session.query(Article, User).join('author').all()
然后我可以像这样访问作者数据(因为它已加入):
firstname = results[0].firstname
但尝试获取标签列表不起作用,而是引发 AttributeError('rowTuple' 对象没有属性 'tags'):
tags = results[0].tags
我做错了什么,访问该索引数据的最佳方式是什么?
【问题讨论】:
标签: python orm sqlalchemy