如何从SQL查询返回的k:v元组列表中创建字典?

时间:2016-09-05 03:40:54

标签: python sql dictionary sqlite

我的SQL(sqlite3)查询是这样的:

SELECT id, name FROM mytable;

这会返回大量的行。我想从这些结果中创建一个字典,在那里我可以查找给定id的名称。

我发现其他答案似乎是根据SQL结果创建字典,但是他们使用列标签作为关键字 - 我对此毫无兴趣。

示例表:

id    | name
------+--------
foo   | bar
baz   | foobar

期望的词典:

{
    'foo': 'bar',
    'baz': 'foobar'
}

3 个答案:

答案 0 :(得分:3)

您可以遍历行(result cursor is iterable),unpack键和值,然后使用dict comprehension汇总结果:

desired_dict = {k:v for k, v in c.execute('SELECT id, name FROM MyTable')}

我喜欢使用dict理解,因为我可以在添加到字典之前对结果进行额外处理(例如更改大小写,转换为十进制或日期时间等)。

那就是说,如果你想直接去dict, ozgur 有更短,更快的方式直接调用dict()

desired_dict = dict(c.execute('SELECT id, name FROM MyTable'))

这是一个实际的示例会话,演示了流程的开始:

>>> import sqlite3
>>> c = sqlite3.connect('tmp.db')
>>> c.execute('CREATE TABLE MyTable (id text, name text)')
<sqlite3.Cursor object at 0x106227f80>
>>> c.execute("INSERT INTO MyTable VALUES ('abc', 'Alpha')")
<sqlite3.Cursor object at 0x106283810>
>>> c.execute("INSERT INTO MyTable VALUES ('def', 'Beta')")
<sqlite3.Cursor object at 0x106227f80>
>>> c.execute("INSERT INTO MyTable VALUES ('ghi', 'Gamma')")
<sqlite3.Cursor object at 0x106283810>
>>> c.commit()
>>> c.close()
>>> 
>>> c = sqlite3.connect('tmp.db')
>>> {k:v for k, v in c.execute('SELECT id, name FROM MyTable')}
{'ghi': 'Gamma', 'def': 'Beta', 'abc': 'Alpha'}

答案 1 :(得分:2)

从cursor返回的结果是一个包含2个元素元组的列表,因此您只需将其转换为字典,因为每个元组的第一项是唯一值:

result = dict(cursor.execute("SELECT id, name FROM mytable"))

答案 2 :(得分:0)

假设您在Python中获得了SQL查询结果,例如

db_conn = sqlite3.connect('text.db') cur = db_conn.cursor() cur.execute('''select id, name from mytable''')

然后,您可以在cur.fetchall()返回时获取所有查询结果。 结果将是一个元组列表,每个元组都会像( id name )。

知道这一点,然后将它转换成字典是一件小事,只需:

mydict = {} for item in cur.fetchall(): mydict[item[0]] = item[1]