2016-02-12 34 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", ...