Читать из базы данных и отображать в виде словаря, а не списка

У меня есть простая база данных с такой структурой таблиц:

----------------
| A1 | A2 | A3 |
|--------------|
| B1 | B2 | B3 |
| C1 | C2 | C3 |
----------------

Используя эту функцию и djangorestframwork:

@api_view(['GET'])
def read(request, source):

    if source not in sources:
        return Response({'error': f'{source} not found', 'allowed sources': sources, 'help': address})

    with connect(f'{source}/news.db') as conn:
        cmd = '''SELECT * FROM newstable'''
        cur = conn.execute(cmd)
        results = cur.fetchall()
        rand_id = randrange(len(results))

        return Response(results[rand_id])

контант отображается в json следующим образом:

[
    'B1',
    'B2',
    'B3
]

Однако я хочу получить следующее:

{
    'A1': 'B1',
    'A2': 'B2',
    'A3': 'B3
}

Это из Django docs:

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()
    ]

Так что вы можете заменить это:

results = cur.fetchall()

с этим:

results = dictfetchall(cur)

Другой вариант - использовать psycopg2.extras.DictCursor.

Вернуться на верх