在SQLalchemy中使用列压缩行?

时间:2013-06-27 22:23:16

标签: python sqlalchemy typeerror pyodbc fetchall

我正在将我的库从使用pyodbc转换为SQLalchemy。不幸的是我收到了这个错误:

  

TypeError(“unhashable type:'list'”,)

这是我的功能:

@route('/api/query/<query>') # not a public system!
def qry(query):
    # `conn` is constructed with `create_engine`
    last_query = conn.execute(query)

    return dict(result=[{zip(last_query._metadata.keys, row)}
                        for row in last_query.fetchall()])

我的pyodbc one(有效):

    conn.cursor.execute(query)
    return dict(results=[dict(zip([column[0] for column
                                   in conn.cursor.description], row))
                     for row in conn.cursor.fetchall()])

1 个答案:

答案 0 :(得分:1)

爆炸的部分是

{zip(last_query._metadata.keys, row)}

问题是{}语法不会自动将元组列表转换为字典。如果切换到

dict(zip(last_query._metadata.keys, row))

你应该好好去。

这是python shell中的一个简化示例:

>>> a = ['a', 'b']
>>> b = [1, 2]
>>> {zip(a, b)}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> dict(zip(a, b))
{'a': 1, 'b': 2}