#python #mysql #django
#python #mysql #django
Вопрос:
Например, у меня есть запрос select a, b, c, d from table
. почему dict иногда возвращает [{‘b’: 2}, {‘a’: 1}, {‘d’: 4}] ….] и т.д. Я хочу, чтобы это [{‘a’: 1}, {‘b’: 2}, {‘c’: 3}, ….] в соответствии с позицией в запросе выбора.
db.execute(query)
data = dictfetchall(db)
def dictfetchall(cursor):
# Return all rows from a cursor as a dict
columns = [col[0] for col in cursor.description]
return [
dict(zip(columns, row))
for row in cursor.fetchall()
]
Комментарии:
1. Какую версию Python вы используете?
2. версия python 3.5.2
Ответ №1:
Ключи Dicts не были упорядочены в Python до версии 3.6, где реализация dict в CPython сохраняет порядок вставки, а в Python 3.7 порядок dict стал официально гарантированным.
Поскольку вы используете Python 3.5, где ключи dict неупорядочены, типичной альтернативой является использование collections.OrderedDict
вместо:
from collections import OrderedDict
def dictfetchall(cursor):
columns = [col[0] for col in cursor.description]
return [
OrderedDict(zip(columns, row))
for row in cursor.fetchall()
]