Читать из базы данных и отображать в виде словаря, а не списка
У меня есть простая база данных с такой структурой таблиц:
----------------
| 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.