我有以下查询,可以在不配置任何形式的紧急加载的情况下进行查找:
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'
这些是使查询生效的修改:
在删除整个.options()
调用时,它可以正常工作,并且在引用result.asset_classes
或result.asset_types
时延迟执行后续查询。
当仅使用 joinedload(Content.asset_classes)
或 joinedload(Content.asset_types)
时,连接有效,只是在同时,为其他关系属性添加更多joinedload
语句时也是如此。
为什么只有一个指令有效,多个joinedload
指令却不起作用?
答案 0 :(得分:0)
在这种情况下,.
个实例之间的点(joinedload
)必须是逗号(,
)。
我也误解了ORM属性之一不可连接,但是错误消息很糟糕。