SQLAlchemy:在与“ secondary”参数的关系上使用“(joined | subquery)load”时出现“未从元素链接”错误

时间:2019-07-23 14:44:30

标签: python sqlalchemy

我有以下查询,可以在不配置任何形式的紧急加载的情况下进行查找:

model.DBSession.query(Content)
                .options(
                    joinedload(Content.asset_classes).
                    joinedload(Content.asset_types))
                .filter(Content.id.in_(content_ids))
                .all()

与这些关系:

    asset_classes = orm.relationship(
        AssetClass,
        backref=orm.backref('content'),
        secondary=content_asset_class_ass_table
    )

    asset_types = orm.relationship(
        AssetType,
        backref=orm.backref('content'),
        secondary=content_asset_type_ass_table
    )

执行此查询时,将导致以下错误:

  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/strategy_options.py", line 156, in _generate_path
    "link from element '%s'" % (attr, path.entity))
ArgumentError: Attribute 'Content.asset_types' does not
    link from element 'Mapper|AssetClass|asset_classes'

这些是使查询生效的修改:

  1. 在删除整个.options()调用时,它可以正常工作,并且在引用result.asset_classesresult.asset_types时延迟执行后续查询。

  2. 当仅使用 joinedload(Content.asset_classes) joinedload(Content.asset_types)时,连接有效,只是在同时,为其他关系属性添加更多joinedload语句时也是如此。

为什么只有一个指令有效,多个joinedload指令却不起作用?

1 个答案:

答案 0 :(得分:0)

在这种情况下,.个实例之间的点(joinedload)必须是逗号(,)。

我也误解了ORM属性之一不可连接,但是错误消息很糟糕。