2016-02-12 64 views
0

我想通過JOIN執行SQL查詢,我可以將表別名傳播到生成的字典鍵中。例如,我可以有一個查詢sqlite3:在JOIN查詢中保留表名

query = """ 
     SELECT t1.col1,t2.col1,t2.col2 
     FROM table1 t1 JOIN table2 t2 
     ON t1.col0=t2.col0 
     """ 

,我想輸出來維持T1,T2的別名,因爲我有重複的列名(COL1)。我會運行

con = sqlite3.connect(dbpath, isolation_level=None, detect_types=sqlite3.PARSE_DECLTYPES) 

def dict_factory(cursor, row): 
    d = {} 
    for idx,col in enumerate(cursor.description): d[col[0]] = row[idx] 
    return d 

db.dict = con.cursor() 
db.dict.row_factory = dict_factory 
result = db.dict.execute(query).fetchone() 

但是這會覆蓋col1的值。我怎麼能回報,說,

{'t1.col1':123, 't2.col1':234, 't2.col2':345} 

謝謝!

回答

0

documentation說:

結果列的名稱是該列的「AS」條款的評估,如果有一個AS子句。如果沒有AS子句,那麼列的名稱是未指定的,並可能從一個SQLite版本更改爲下一個。

所以你要做的:

SELECT t1.col1 AS "t1.col1", t2.col1 AS "t2.col1", ...