необработанный запрос django возвращает неупорядоченную позицию в соответствии с выбранным запросом - PullRequest
1 голос
/ 11 апреля 2019

У меня есть запрос, например select a, b, c, d from table. почему диктов иногда возвращает [{'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 Ответ

0 голосов
/ 11 апреля 2019

Ключи Dicts были неупорядочены в Python до версии 3.6, где реализация dict в CPython сохраняет порядок вставки, а в Python 3.7 порядок диктов стал официально гарантированным.

Поскольку вы используете 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()
    ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...