2016-11-29 4 views
1

У меня есть запрос, где я соединяю несколько таблиц с похожими именами столбцов. Чтобы устранить их несогласованность, я хочу суффиксом имени таблицы на имя столбца, например: <column_name>_<table_name>. В каждой таблице есть сотни столбцов, поэтому я хотел бы сделать это программно.SQLAlchemy: имя таблицы суффикса для столбцов вывода

Есть ли способ сделать что-то вроде?

sa.select([ 
    table1.c.suffix('_1'), 
    table2.c.suffix('_2')]). 
select_from(table1.join(table2, table1.c.id == table2.c.id)) 

ответ

0

Вы хотите использовать label ключевое слово:

sa.select([ 
    table1.c.column_name.label('_1'), 
    table2.c.column_name.label('_2')]). 
select_from(table1.join(table2, table1.c.id == table2.c.id)) 

Это позволит вам иметь такое же имя столбца из разных таблиц.

Если у вас есть таблица, которая является динамическим, или т столбцов, лучше всего будет сделать что-то вроде этого:

псевдо-код:

select * from information_schema.columns where table_name = 'my_table" 

получить результаты от запрос

return_columns = [] 
counter = 0 
for r in results: 
    counter += 1 
    return_columns.append("`table_name`.`" + r.column_name + "` as col_{}".format(counter)) 

Создание динамического sql потребует от вас частичного создания. Я делаю это в своем приложении все время. Кроме того, я не использую информационную схему. У меня есть таблица, в которой есть мои имена столбцов.

Это должно привести вас в правильном направлении.

+0

У меня есть сотни столбцов. Есть ли способ сделать это программно? – user1742188

+0

@ user1742188 Я обновил свой ответ, чтобы включить некоторый псевдокод, который может привести вас в правильном направлении. Это займет некоторое финал, основанный на вашей текущей структуре и коде, но так вы можете это сделать. – CodeLikeBeaker

Смежные вопросы