关于克劳斯的未知列'ColumnName'

2024-04-28 02:58:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用SQLAlchemy,在生成的SQL查询中有以下错误。我有一个表relaciones_laborales,它需要连接两个表funciones_relacion_laboral和字段RelLabId以及puestos和字段PuestoId

join=(relaciones_laborales.join(
    funciones_relacion_laboral.join(
        funciones_asignadas.join(
            sillas.join(
                silla_grupo_materia.join(
                    puestos, (relaciones_laborales.c.PuestoId ==
                              puestos.c.PuestoId)),
                sillas.c.SillaId == silla_grupo_materia.c.SillaId,
                isouter=True),
            sillas.c.SillaId == funciones_asignadas.c.SillaId),
        (funciones_asignadas.c.FuncAsignadaId ==
         funciones_relacion_laboral.c.FuncAsignadaId)),
    relaciones_laborales.c.RelLabId == funciones_relacion_laboral.c.RelLabId)) 

然后用

query = sa.select(...).select_from(join)

我得到以下错误:

1054, u"Unknown column 'RELACIONES_LABORALES.PuestoId' in 'on clause'"

Tags: 错误joinpuestosgrupolaboralfuncionessillalaborales
1条回答
网友
1楼 · 发布于 2024-04-28 02:58:53

为了清楚起见,让我们用一个简单一点的例子。给定表格xyz

x, y, z = [Table(t, metadata, Column('i', Integer))
           for t in ['x', 'y', 'z']]

陈述,如

j = x.join(y.join(z, x.c.i == z.c.i), y.c.i == x.c.i)

生成可编译为的SQL表达式对象

x JOIN (y JOIN z ON x.i = z.i) ON y.i = x.i

因为最里面的表达式首先求值,作为参数传递给封闭函数调用,依此类推。括号中的连接优先,但此时没有可见的表。另一方面,如果您稍微改变了形成连接的方式并将它们链接起来:

j = x.\
    join(y, y.c.i == x.c.i).\
    join(z, z.c.i == x.c.i)

你得到了吗

x JOIN y ON y.i = x.i JOIN z ON z.i = x.i

这可能就是你想要的。考虑到这一点:

join = (
    relaciones_laborales.

    join(funciones_relacion_laboral,
         relaciones_laborales.c.RelLabId ==
         funciones_relacion_laboral.c.RelLabId).

    join(funciones_asignadas,
         funciones_asignadas.c.FuncAsignadaId ==
         funciones_relacion_laboral.c.FuncAsignadaId).

    join(sillas,
         sillas.c.SillaId == funciones_asignadas.c.SillaId).

    join(silla_grupo_materia,
         sillas.c.SillaId == silla_grupo_materia.c.SillaId,
         isouter=True).

    join(puestos,
         relaciones_laborales.c.PuestoId == puestos.c.PuestoId)
)

相关问题 更多 >