Есть веб сайт с выгрузкой таблицы из БД, мне нужно реализовать скачивание данной таблицы при выбранных пользователем датах в формате xlsx.
Появляется такая ошибка.
[2023-05-10 14:52:28,917] ERROR in app: Exception on /download [GET]
Traceback (most recent call last):
File "C:\Users\antrodmi\AppData\Local\Programs\Python\Python311\Lib\site-packages\flask\app.py", line 2528, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\antrodmi\AppData\Local\Programs\Python\Python311\Lib\site-packages\flask\app.py", line 1825, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\antrodmi\AppData\Local\Programs\Python\Python311\Lib\site-packages\flask\app.py", line 1823, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\antrodmi\AppData\Local\Programs\Python\Python311\Lib\site-packages\flask\app.py", line 1799, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\antrodmi\Desktop\toplivobdd\app.py", line 77, in download
workbook.save(filepath)
File "C:\Users\antrodmi\AppData\Local\Programs\Python\Python311\Lib\site-packages\openpyxl\workbook\workbook.py", line 386, in save
save_workbook(self, filename)
File "C:\Users\antrodmi\AppData\Local\Programs\Python\Python311\Lib\site-packages\openpyxl\writer\excel.py", line 291, in save_workbook
archive = ZipFile(filename, 'w', ZIP_DEFLATED, allowZip64=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\antrodmi\AppData\Local\Programs\Python\Python311\Lib\zipfile.py", line 1281, in __init__
self.fp = io.open(file, filemode)
^^^^^^^^^^^^^^^^^^^^^^^
PermissionError: [Errno 13] Permission denied: 'C:\\Users\\Default\\Downloads\\toplivo.xlsx'
Подскажите, пожалуйста, как исправить эту ошибку.
Мой код:
@app.route("/download", methods=["GET","POST"])
def download():
if request.method == "GET":
# Получаем начальную и конечную даты из скрытых полей на поле
start_date = request.args.get("start_date")
end_date = request.args.get("end_date")
start_date = datetime.strptime(start_date,"%Y-%m-%d")
end_date = datetime.strptime(end_date,"%Y-%m-%d")
# Запрос к БД с использованием параметров дат
cur = conn.cursor()
cur.execute("SELECT * FROM toplivo WHERE date BETWEEN %s AND %s ORDER BY date ASC;",(start_date,end_date))
rows = cur.fetchall()
cur.close
filename = "toplivo.xlsx"
filepath = os.path.join("C:\\Users\\Default\\Downloads", filename)
# создаем новую книгу excel
workbook = openpyxl.Workbook()
# Получаем активный лист
worksheet = workbook.active
# Заполняем таблицу данными из запроса к базе данных
worksheet.append(["Месяц", "Контрагент","Вид обязательств", "Договор", "Номер счет фактуры", "Дата", "Станция", "k", "Количество, тыс.тут.куб.м", "Стоимость без НДС, руб.", "Цена руб./тыс.м3", "Калорийность поставщика", "Калорийность электростанции", "Количество, тут","Цена руб./тут", "Для средневзвеса калорийности поставщика", "Для средневзвеса калорийности станции", "Скачать договор"])
for row in rows:
worksheet.append(list(row))
# Сохраняем результат в файл
workbook.save(filepath)
# Возвращаем файл на скачивание
return send_from_directory(directory="downloads", filename=filename, as_attachment=True)
else:
return redirect(url_for("index"))
if __name__ == "__main__":
app.run()