python - 在 contains_eager() 中指定具有继承层次结构的实体的完整路径

标签 python sqlalchemy

我有一个问题

(session.query(Root).with_polymorphic('*')
    .outerjoin(Subclass.related1).options(contains_eager(Subclass.related1)))

到目前为止一切正常。

我也想急切地加载 Related1.related2 我试过这个:

(session.query(Root).with_polymorphic('*')
    .outerjoin(Subclass.related1).options(contains_eager(Subclass.related1))
    .outerjoin(Related1.related2).options(contains_eager(Related1.related2)))

但它不起作用:

sqlalchemy.exc.ArgumentError: Can't find property 'related2' on any entity specified in this Query. Note the full path from root (Mapper|Root|root) to target entity must be specified.

鉴于 related1 通过子类与根实体相关,我不知道如何指定完整路径。

我也试过

(session.query(Root).with_polymorphic('*')
    .outerjoin(Subclass.related1).options(contains_eager(Subclass.related1))
    .outerjoin(Related1.related2).options(contains_eager('related1.related2')))

可预见的失败

sqlalchemy.exc.ArgumentError: Can't find property named 'related1' on the mapped entity Mapper|Root|root in this Query.

如何在 contains_eager() 中指定间接相关实体的完整路径?

最佳答案

contains_eager 需要查询所知道的实体的完整路径:

contains_eager(Subclass.related1, Related1.related2)

关于python - 在 contains_eager() 中指定具有继承层次结构的实体的完整路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14414345/

相关文章:

python 动态范围正则表达式

python - 使用 sqlalchemy 和 elixir 更新 sqlite 数据库模式

python - sqlalchemy 关系隐式诱导连接

python - SQLAlchemy:load_only 不适用于别名继承模型

python - 为 MySQL CREATE TABLE 生成 SQLAlchemy KEY 子句

python - SQLAlchemy - 什么是 declarative_base

python - 安装 pysqlcipher3 windows

python - 启用 3D 透明度 - pyopengl

python - 限制嵌入式Python的执行时间

Python setuptools 符号链接(symbolic link)和自定义安装扩展