Я работаю над веб-приложением Flask и пытаюсь реализовать функцию, которая позволит мне редактировать пробеги для водителей и курсов. Я включил соответствующий код, но столкнулся с проблемой, из-за которой моя база данных не обновляется должным образом.
logging.basicConfig(filename='app.log', level=logging.DEBUG) Защиту get_runs_from_database (selection_type, selected_id): соединение = create_db_connection() курсор = Connection.cursor(словарь=True) работает = [] если choice_type == "драйвер": query = "ВЫБЕРИТЕ run_num, секунды, конусы, wd FROM run WHERE dr_id = %s;" выполнение курсора (запрос, (selected_id,)) работает = курсор.fetchall() elif choice_type == "курс": query = "ВЫБЕРИТЕ run_num, секунды, конусы, wd FROM run WHERE crs_id = %s;" курсор.execute(запрос, (selected_id,)) close_db_connection (соединение) обратные прогоны @app.route('/editruns', методы = ['GET', 'POST']) защита edit_runs(): если запрос.метод == 'GET': драйверы = get_drivers() курсы = get_courses() return render_template('editruns.html',drivers=drivers,courses=courses,runs=None) если запрос.метод == 'POST': driver_id = request.form.get('driver_id') Course_id = запрос form.get('course_id') работает = [] если идентификатор_драйвера: работает = get_runs_from_database("драйвер", driver_id) Элиф конечно_ид: run = get_runs_from_database("курс", Course_id) драйверы = get_drivers() курсы = get_courses() return render_template('editruns.html', драйверы=драйверы, курсы=курсы, прогоны=пробеги) # Обрабатывать редактирование и обновление запусков если запрос.метод == 'POST': # Проверяем, есть ли в данных формы отредактированные прогоны edited_runs = request.form.getlist('editedruns') если edited_runs: для run_data в edited_runs: run_id, run_time, конусы, wd = run_data.split(',') # Обновляем только предоставленные значения, сохраняем существующие значения, если они пусты если время выполнения: update_run_in_database (run_id, run_time, конусы, wd) flash("Обновление успешно запущено!", "успех") вернуть перенаправление (url_for ('edit_runs')) # Проверяем, обновляется ли одиночный прогон driver_id = request.form.get('driver_id') run_time = request.form.get('run_time') конусы = запрос form.get('конусы') wd = request.form.get('wd') # Обновляем только предоставленные значения, сохраняем существующие значения, если они пусты если время выполнения: update_run_in_database (driver_id, run_time, конусы, wd) flash("Обновление выполнено успешно!", "успех") вернуть перенаправление (url_for ('edit_runs')) # Обрабатывать редактирование и обновление запусков одним и тем же методом POST. # Внутри обработки POST-запроса для редактирования если запрос.метод == 'POST': # Проверяем, есть ли в данных формы отредактированные прогоны edited_runs = request.form.getlist('editedruns') если edited_runs: для run_data в edited_runs: run_id, run_time, конусы, wd = run_data.split(',') # Обновляем только предоставленные значения, сохраняем существующие значения, если они пусты если время выполнения: update_run_in_database (run_id, run_time, конусы, wd) flash("Обновление успешно запущено!", "успех") вернуть перенаправление (url_for ('edit_runs')) # Проверяем, обновляется ли одиночный прогон driver_id = request.form.get('driver_id') run_time = запрос form.get('run_time') конусы = request.form.get('конусы') wd = запрос form.get('wd') # Обновляем только предоставленные значения, сохраняем существующие значения, если они пусты если время выполнения: update_run_in_database (driver_id, run_time, конусы, wd) flash("Обновление выполнено успешно!", "успех") вернуть перенаправление (url_for ('editruns')) Защиту get_runs (selection_type, selected_id): # Выборка выполняется на основе выбора соединение = create_db_connection() курсор = Connection.cursor(словарь=True) если choice_type == "драйвер": курсор.execute("SELECT run_num, секунды, конусы, wd FROM run WHERE dr_id = %s", (selected_id,)) elif choice_type == "курс": курсор.execute("ВЫБЕРИТЕ run_num, секунды, конусы, wd FROM run WHERE crs_id = %s", (selected_id,)) работает = курсор.fetchall() close_db_connection (соединение) обратные прогоны защита get_drivers(): # Извлекаем драйверы из базы данных соединение = create_db_connection() курсор = Connection.cursor(словарь=True) курсор.execute("ВЫБРАТЬ * ИЗ драйвера") драйверы = курсор.fetchall() close_db_connection (соединение) вернуть водителей защита get_courses(): # Извлекаем курсы из базы данных соединение = create_db_connection() курсор = Connection.cursor(словарь=True) курсор.execute("ВЫБРАТЬ * ИЗ курса") курсы = курсор.fetchall() close_db_connection (соединение) повторные курсы # Внутри функции запуска обновления в базе данных # Внутри функции запуска обновления в базе данных # Внутри функции запуска обновления в базе данных def update_run_in_database(dr_id, run_time, cones, wd): пытаться: соединение = create_db_connection() курсор = соединение.курсор() # Определите SQL-запрос для обновления данных запуска на основе dr_id update_query = """ ОБНОВЛЕНИЕ SET секунды = %s, конусы = %s, wd = %s ГДЕ dr_id = %s; """ # Зарегистрируйте SQL-запрос и параметры запроса перед выполнением для отладки. logging.info("SQL-запрос: %s", update_query) logging.info("Параметры запроса: %s", (run_time, cones, wd, dr_id)) # Выполняем запрос на обновление с указанными значениями в правильном порядке курсор.execute(update_query, (run_time, конусы, wd, dr_id)) # Зарегистрируйте сообщение, указывающее, что запрос был выполнен logging.info("Запрос выполнен успешно") # Зафиксируем изменения в базе данных соединение.коммит() # Зарегистрируйте сообщение, указывающее, что изменения были зафиксированы logging.info("Изменения успешно зафиксированы") flash("Данные запуска успешно обновлены!", "успех") кроме исключения как e: flash(f"Ошибка: {e}", "опасность") # Записать сообщение об ошибке на консоль для отладки logging.error(f"Ошибка запуска обновления: {e}") окончательно: close_db_connection (соединение) HTML Редактировать запуски Выбрать драйвер: -- Выберите драйвер -- {% для драйвера в драйверах %} {{ driver.first_name }} {{ driver.surname }} {% конец для %} Выбрать курс: -- Выберите курс -- {% за курс в курсах %} {{ Course.name }} {% конец для %} Выбрать {% если выполняется %} Номер запуска Время выполнения Конусы WD {% для прогонов %} {{ run.run_num }} {{ run.секунды }} {{ run.cones }} {{ run.wd }} {% конец для %} {% конечный %} {% с сообщениями = get_flashed_messages() %} {% если сообщения %}
- {% для сообщения в сообщениях %}
- {{ сообщение }} {% конец для %}
Мобильная версия