Sqlalchemy动态创建联接

时间:2016-11-16 18:24:34

标签: python sqlalchemy

我在t中有多个表格,我希望以下列方式加入所有表格:

sa.select(['*'])
.select_from(
t[0]
.join(t[1], (t[1].c.id == t[0].c.id), full=True)
.join(t[2], (t[2].c.id == t[0].c.id), full=True)
...
.join(t[n], (t[n].c.id == t[0].c.id), full=True)
)

但是n在运行时会有所不同。是否可以动态生成此查询?

1 个答案:

答案 0 :(得分:2)

您可以使用循环来计算n联接的结果:

t_joined = t[0]
for i in range(1, n+1):
    t_joined = t_joined.join(t[i], t[i].c.id == t[0].c.id, full=True)
result = sa.select(['*']).select_from(t_joined)

或者,如果意图是简单地遍历t中的所有表,那么循环可以简化为

t_joined = t[0]
for ti in t[1:]:
    t_joined = t_joined.join(ti, ti.c.id == t[0].c.id, full=True)
result = sa.select(['*']).select_from(t_joined)