Как мне извлечь данные строки из моей базы данных Django в виде списка?

#python #mysql #django #excel #django-queryset

#python #mysql #django #excel #django-набор запросов

Вопрос:

Я хотел бы получить данные из строк таблицы моей базы данных Django в виде списка, чтобы я мог выполнять итерации по ним и записывать каждое значение списка в электронную таблицу Excel. Я пытался сделать это с помощью словарей, но словари не упорядочены в Python, поэтому все мои столбцы были не в порядке. Мне нужно, чтобы моя электронная таблица Excel выглядела так же, как таблица моей базы данных, а не была скремблирована в случайном порядке. Как я могу этого добиться?

Текущий код:

 def dump_attorneys_to_xlsx(request):
    if request.GET.get('export'):
        output = BytesIO()
        workbook = xlsxwriter.Workbook(output, {'in_memory': True})
        worksheet = workbook.add_worksheet('Summary')

        attorneys = Attorney.objects.all().values()
        # Write header
        worksheet.write_row(0, 0, attorneys[0].keys())
        # Write data
        for row_index, row_dict in enumerate(attorneys, start=1):
            worksheet.write_row(row_index, 0, row_dict.values())
        workbook.close()

        output.seek(0)

        response = HttpResponse(output.read(), content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
        response['Content-Disposition'] = 'attachment; filename=summary.xlsx'
  

Ответ №1:

Вы могли бы либо использовать csv.DictWriter объект, который может принимать список словарей вместо списков, либо использовать values_list метод QuerySet вместо values , чтобы возвращать список строк вместо словарей.


В противном случае вы можете заказать запись в файл следующим (не очень производительным) способом:

 keys = attorneys[0].keys()
worksheet.write_row(0, 0, keys)
# Write data
for row_index, row_dict in enumerate(attorneys, start=1):
    row = [row_dict[k] for k in keys]
    worksheet.write_row(row_index, 0, row)