2016-11-16 69 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)