2016-11-29 57 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