У меня есть словарь с именами таблиц и столбцов, например 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
. Похоже, что соединение не произошло со всеми тремя таблицами. Только листовки и демография объединены.