Объединение нескольких таблиц с использованием цикла с sqlalchemy - PullRequest
1 голос
/ 09 ноября 2019

У меня есть словарь с именами таблиц и столбцов, например input = {'demographics':['age', 'gender'], 'automobile':['aut-01'], 'flyers':['fly-00', 'fly-01']}, ключ - это имя таблицы, а значение - список столбцов, которые нужно извлечь из этой таблицы. Все таблицы должны быть объединены первичным ключом id.

Я создаю tables_needed_to_load = input.keys() и columns_needed_to_load = input.values(), а затем я делаю

if len(tables_needed_to_load) >= 1:
    base_table = Table(tables_needed_to_load[0], metadata, autoload = True, autoload_with = engine)
    base_col = [base_table.c[c] for c in columns_needed_to_load[0]]

if len(tables_needed_to_load) >= 2:
    for t, l in zip(tables_needed_to_load[1:], columns_needed_to_load[1:]):
        table = Table(t, metadata, autoload = True, autoload_with = engine)
        base_col += [table.c[c] for c in l]
        j = outerjoin(base_table, table, table.c.id == base_table.c.id)

s = select(base_col).select_from(j)
result = connection.execute(s)

Однако это не работает,Необработанный оператор SQL выглядит следующим образом. SELECT demographics.age, demographics.gender, automobile."aut-01", flyers."fly-01", flyers."fly-00" FROM automobile, demographics LEFT OUTER JOIN flyers ON flyers.id = demographics.id. Похоже, что соединение не произошло со всеми тремя таблицами. Только листовки и демография объединены.

...