python - 使用 SQLAlchemy 检索 ORM 属性

标签 python orm sqlalchemy

我在 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

我做错了什么,访问该索引数据的最佳方法是什么?

最佳答案

考虑急切加载,如 Working with Related Objects 中所述?

你的加入也很时髦。您将 ORM 与 SQL 工具包混合在一起,因此您将获得行对象而不是映射对象。请参阅Querying with Joins

关于python - 使用 SQLAlchemy 检索 ORM 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1977008/

相关文章:

python - 尝试在 Python 中使用运算符方法时出现类型错误

python - Sqlalchemy:二次关系更新

python - Keras 未检测到 GPU,但 TensorFlow 检测到

python - 字节表示中的\t 和\r 是什么?

oracle - 在 SQLAlchemy 中使用 Oracle 服务名称

python - 如何为一对多关系中的反向关系编写 Django ORM 查询?

c++ - Soci 作为 linux/ubuntu 上的静态库?

node.js - 用 Sequelize 返回外键的表数据

sql - Flask 和 SQLAlchemy 不工作((OperationalError)没有这样的表 :)

sqlite - 如何在sqlalchemy迁移脚本或sqlite的配置文件中打开 'PRAGMA foreign_keys = ON'?