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

Но п изменяется во время выполнения. Можно ли генерировать этот запрос динамически?

ответ

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) 
Смежные вопросы