2016-11-16 66 views
0

我在t多个表,我想加入他们所有的方式如下:SQLAlchemy的动态创建的连接

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在运行时发生变化。是否有可能动态生成此查询?

回答

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)