我有以下查询,可以在没有配置任何形式的预先加载的情况下找到:
model.DBSession.query(Content)
.options(
joinedload(Content.asset_classes).
joinedload(Content.asset_types))
.filter(Content.id.in_(content_ids))
.all()
Run Code Online (Sandbox Code Playgroud)
还有这些关系:
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
)
Run Code Online (Sandbox Code Playgroud)
当执行此查询时,会导致以下错误:
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'
Run Code Online (Sandbox Code Playgroud)
这些是使查询工作的修改:
当删除整个.options()调用时,它工作正常,并且在引用result.asset_classes或时会延迟执行后续查询result.asset_types。
当仅使用or joinedload(Content.asset_classes) 时 joinedload(Content.asset_types),连接有效,但它不能同时与两者一起工作,并且在joinedload为其他关系属性添加更多语句时类似。
为什么joinedload当单个指令有效时多个指令不起作用?