#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)