我想使用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决定生成查询的方式而改变。
答案 0 :(得分:0)
拆分名称字符串并取第二部分,如果您想准备名称不以表名为前缀,请将代码放在try - except
块中:
for col in subquery.c:
try:
print(col.name.split('.')[1])
except IndexError:
print(col.name)
此外,结果代理(region_A_results
)有一个方法keys
,它返回一个列名列表。同样,如果您不需要表名,您可以轻松摆脱它们。