SQLAlchemy从列中获取标签名称

时间:2015-03-31 00:39:18

标签: sql postgresql sqlalchemy

我想使用SQLAlchemy表中的相同标签来重新聚合一些数据(例如,我想通过mytable.c进行迭代以准确获取列名)。

我有一些看似如下的支出数据:

| name | region | date | spending |
| John |    A   | .... |   123    |
| Jack |    A   | .... |    20    |
| Jill |    B   | .... |   240    |

然后我将它传递给我们现有的函数,汇总超过2个时期(使用案例陈述)和按地区分组:

grouped table:
| Region | Total (this period) | Total (last period)  |
|    A   |             3048    |             1034     |
|    B   |             2058    |              900     |

该函数返回一个SQLAlchemy查询对象,然后我可以使用subquery()来重新查询,例如:

subquery = get_aggregated_data(original_table)
region_A_results = session.query(subquery).filter(subquery.c.region = 'A')

然后我想重新聚合这个子查询(将每个可以求和的列相加,用一个字符串替换 region 列'其他'。

问题是,如果我遍历subquery.c,我会得到如下标签:

anon_1.region
anon_1.sum_this_period
anon_1.sum_last_period

有没有办法从一组列对象中获取文本标签,而没有 anon_1。前缀?特别是因为我觉得前缀可能会根据SQLAlchemy决定生成查询的方式而改变。

1 个答案:

答案 0 :(得分:0)

拆分名称字符串并取第二部分,如果您想准备名称不以表名为前缀,请将代码放在try - except块中:

for col in subquery.c:
    try:
        print(col.name.split('.')[1])
    except IndexError:
        print(col.name)

此外,结果代理(region_A_results)有一个方法keys,它返回一个列名列表。同样,如果您不需要表名,您可以轻松摆脱它们。