我的SQL(sqlite3)查询是这样的:
SELECT id, name FROM mytable;
这会返回大量的行。我想从这些结果中创建一个字典,在那里我可以查找给定id的名称。
我发现其他答案似乎是根据SQL结果创建字典,但是他们使用列标签作为关键字 - 我对此毫无兴趣。
示例表:
id | name
------+--------
foo | bar
baz | foobar
期望的词典:
{
'foo': 'bar',
'baz': 'foobar'
}
答案 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]