SQLAlchemy 从列中获取标签名称

SQLAlchemy getting label names out from columns

我想使用来自 SQLAlchemy table 的相同标签来重新聚合一些数据(例如,我想遍历 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     |

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

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

然后我想重新聚合此子查询(对可以求和的每一列求和,用字符串 'other'.[=14= 替换 region 列]

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

anon_1.region
anon_1.sum_this_period
anon_1.sum_last_period

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

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

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

此外,结果代理 (region_A_results) 有一个方法 keys,其中 returns 是一个列名列表。同样,如果您不需要 table 名称,您可以轻松删除它们。