从别名表急切加载关系时出现“不从元素链接”错误

fun*_*iki 5 python sqlalchemy

查询表时,我想立即加载一组列。在 1.3.x 之前,我可以使用以下代码来完成此操作,但现在我得到:

sqlalchemy.exc.ArgumentError: Attribute "AliasedClass_Blueprint.engineer" does not link from element "mapped class
 Blueprint->blueprints".  Did you mean to use Building.blueprint.of_type(AliasedClass_Blueprint)?
Run Code Online (Sandbox Code Playgroud)

有问题的查询设置如下:

sqlalchemy.exc.ArgumentError: Attribute "AliasedClass_Blueprint.engineer" does not link from element "mapped class
 Blueprint->blueprints".  Did you mean to use Building.blueprint.of_type(AliasedClass_Blueprint)?
Run Code Online (Sandbox Code Playgroud)

该错误建议使用building.blueprint.of_type(blueprint),这似乎工作正常,但它看起来正在完成与所做的类似的事情alias=blueprint。是否of_type(x)替换alias=x参数?

下面是一个功能示例,其中包含一个工作函数和一个重现错误的函数:

def doQuery():
    building = aliased(Building)
    blueprint = aliased(Blueprint, name="blueprint")
    engineer = aliased(Engineer, name="engineer")

    with sessionScope() as session:
        return session.query(building)\
            .join(blueprint, blueprint.id==building.blueprintId)\
            .outerjoin(engineer, blueprint.engineerId==engineer.id)\
            .options(contains_eager(building.blueprint, alias=blueprint))\
            .options(contains_eager(building.blueprint, alias=blueprint)\
                 # The error shows up here
                .contains_eager(blueprint.engineer, alias=engineer))
Run Code Online (Sandbox Code Playgroud)