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 名称,您可以轻松删除它们。
我想使用来自 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 名称,您可以轻松删除它们。