Веб-приложение Flask не обновляет базу данных MySQLPython

Программы на Python
Ответить
Anonymous
 Веб-приложение Flask не обновляет базу данных MySQL

Сообщение Anonymous »

ПИТОН
Я работаю над веб-приложением 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() %} {% если сообщения %}
  • {% для сообщения в сообщениях %}
  • {{ сообщение }} {% конец для %}
{% конечный %} {% endwith %} База данных - Структура таблицы `car` СОЗДАТЬ ТАБЛИЦУ `автомобиль` ( `car_num` int(11) НЕ НУЛЬ, `модель` varchar(20) НЕ NULL, `drive_class` varchar(3) НЕ НУЛЬ ) ENGINE=InnoDB CHARSET ПО УМОЛЧАНИЮ=utf8mb4 COLLATE=utf8mb4_general_ci; -- Сбрасываем данные для таблицы `car` ВСТАВИТЬ В `car` (`car_num`, `model`, `drive_class`) ЗНАЧЕНИЯ -- Структура таблицы для таблицы "курс" СОЗДАТЬ ТАБЛИЦУ `курс` ( `course_id` varchar(1) НЕ NULL, `name` varchar(30) НЕ NULL, `image` varchar(20) ПО УМОЛЧАНИЮ NULL ) ENGINE=InnoDB CHARSET ПО УМОЛЧАНИЮ=utf8mb4 COLLATE=utf8mb4_general_ci; -- Сбрасываем данные для таблицы `course` INSERT INTO `course` (`course_id`, `name`, `image`) ЗНАЧЕНИЯ -- Структура таблицы для таблицы `driver` СОЗДАТЬ ТАБЛИЦУ `драйвер` ( `driver_id` int(11) НЕ НУЛЬ, `first_name` varchar(25) НЕ NULL, `фамилия` varchar(25) НЕ NULL, `date_of_birth` дата ПО УМОЛЧАНИЮ NULL, `возраст` int(11) ПО УМОЛЧАНИЮ NULL, `опекун` int(11) DEFAULT NULL, `car` int(11) НЕ НУЛЬ, `is_junior` int(1) ПО УМОЛЧАНИЮ 0 ) ENGINE=InnoDB CHARSET ПО УМОЛЧАНИЮ=utf8mb4 COLLATE=utf8mb4_general_ci; -- Сбрасываем данные для таблицы `driver` INSERT INTO `driver` (`driver_id`, `first_name`, `surname`, `date_of_birth`, `возраст`, `опекун`, -- Структура таблицы для таблицы `run` СОЗДАТЬ ТАБЛИЦУ `выполнить` ( `dr_id` int(11) НЕ НУЛЬ, `crs_id` varchar(1) НЕ НУЛЬ, `run_num` int(11) НЕ НУЛЬ, `секунды` float DEFAULT NULL, `cones` int(11) DEFAULT NULL, `wd` tinyint(1) NOT NULL ПО УМОЛЧАНИЮ 0 ) ENGINE=InnoDB CHARSET ПО УМОЛЧАНИЮ=utf8mb4 COLLATE=utf8mb4_general_ci; -- Сбрасываем данные для таблицы `run` INSERT INTO `run` (`dr_id`, `crs_id`, `run_num`, `секунды`, `cones`, `wd`) ЗНАЧЕНИЯ Редактировать запуски Введите или отредактируйте время, конусы и WD для пробежки. Администратор сможет выбрать водителя, а затем редактировать любые заезды для этого водителя или выбрать курс для редактирования любых заездов для этого курса. Администратору не нужно повторно вводить какие-либо существующие значения, которые не вводятся/редактируются.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»