2015-03-31 160 views
0

我想從SQLAlchemy表中使用相同的標籤來重新聚合一些數據(例如,我想通過mytable.c來迭代以精確地獲取列名)。SQLAlchemy從列中獲取標籤名稱

我有一個看起來像一些支出數據如下:

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

我然後將它傳遞給現有的功能,我們有,通過聚集消費滿2個週期(使用case語句)和組區域:

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

該函數返回一個SQLAlchemy的查詢對象,我可以再使用子查詢()到重新查詢例如:

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

我想然後重新聚合此子查詢(將可以求和的每個列相加,用字符串'other'替換區域列。

的問題是,如果我通過subquery.c迭代,我得到的標籤,看起來像:

anon_1.region 
anon_1.sum_this_period 
anon_1.sum_last_period 

是否有一種方式來獲得從一組列對象的文本標籤,無anon_1 。前綴?特別是因爲我覺得前綴可能會改變,這取決於SQLAlchemy決定如何生成查詢。

回答

0

斯普利特名字符串,然後在第二部分,如果你想爲這個名字不是由表名前綴的機會做好準備,將代碼放在一個try - except塊:

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

而且,結果代理(region_A_results)有一個方法keys,它返回一個列名稱列表。同樣,如果你不需要表名,你可以很容易地擺脫它們。

+0

這正是我一直在尋找的。假設split('。')處理table.column split是否安全?到目前爲止,我已經看到由SQLAlchemy自動生成的所有表/列標籤都是蛇形的,但我認爲這是由於週期字符在涉及SQL表達式時是模式/表/列分隔符? – J3Y 2015-03-31 04:21:54

+0

是的,'split('。')'應該很好地分割table.column標籤約定,它不會在意字符串是否爲蛇形或其他形式。 – 2015-03-31 04:30:04