Python 使用SQLAlchemy检索ORM属性

Python 使用SQLAlchemy检索ORM属性,python,orm,sqlalchemy,Python,Orm,Sqlalchemy,我在SQLAlchemy中定义了三个表(用户、文章和标记),并使用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.r

我在SQLAlchemy中定义了三个表(用户、文章和标记),并使用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),
    })
我列出了一个文章索引,每篇文章都需要显示它的标签和作者。我试图找出检索作者和标记数据的最佳方法(最少的SQL查询,更好的性能)

如果我这样做:

results = Session.query(Article).all()
results = Session.query(Article, User).join('author').all()
然后,我可以像这样为索引中的每一篇文章提取作者和标签:

author = results[0].author
tags = results[0].tags
但这会对我循环的每个结果[x]运行两个新查询(yikes)。如果我这样做:

results = Session.query(Article).all()
results = Session.query(Article, User).join('author').all()
然后我可以像这样访问作者数据(因为它已加入):

但尝试获取标记列表不起作用,反而会引发AttributeError(“rowTuple”对象没有属性“tags”):

我做错了什么?访问此索引数据的最佳方式是什么?

如中所述


你的加入也很时髦。您将ORM与SQL工具包混合在一起,因此您得到的是行对象,而不是映射对象。见

谢谢。这正是我需要的。