При вызове функции в python не обращается к обновленным данным mysql
Идея в том, что при нажатии на кнопку данные в таблице должны меняться с 0 на 1 а при повторном нажатии с 1 на 0. Код написан так:
def to_work(nick_name):
session_char_data = get_char_data_from_mysql_by_nick_name(nick_name)
id_worker = session_char_data[0]['id']
name_worker = session_char_data[0]['name']
lvl_worker = session_char_data[1]['lvl']
is_busy_worker = session_char_data[1]['is_busy']
is_busy(id_worker, is_busy_worker) # --- вызов функции тут
print(f"worker id: {id_worker} | worker name: {name_worker} | worker lvl: {lvl_worker} | is busy : {is_busy_worker}")
def is_busy(id_worker, is_busy_worker):
if is_busy_worker == 0:
with connection.cursor() as cursor:
check_query = f"UPDATE stats SET is_busy=1 WHERE id = '{id_worker}';" # COLLATE utf8mb4_bin
cursor.execute(check_query)
connection.commit()
print(1)
else:
with connection.cursor() as cursor:
check_query = f"UPDATE stats SET is_busy=0 WHERE id = '{id_worker}';" # COLLATE utf8mb4_bin
cursor.execute(check_query)
connection.commit()
print(2)
Проблема в том, что пока не перезапущу app.py при нажатии будет срабатывать только if. После перезапуска будет срабатывать только else, сколько бы не нажимал на кнопку. Я делал вторую функцию проще, тоже не работает.
def is_busy(id_worker, is_busy_worker):
with connection.cursor() as cursor:
check_query = f"UPDATE stats SET is_busy='{not is_busy_worker}' WHERE id = '{id_worker}';" # COLLATE utf8mb4_bin
cursor.execute(check_query)
connection.commit()
Подскажите пожалуйста, в чем ошибка?
Ответы (1 шт):
Автор решения: AnnaBazueva
→ Ссылка
Первое, надо обновлять состояние из БД после вызова is_busy()
:
def to_work(nick_name):
# тут Ваш код...
# Вызов функции для обновления состояния
is_busy(id_worker, is_busy_worker)
# Получаем новое состояние после обновления
updated_worker_data = get_char_data_from_mysql_by_nick_name(nick_name)
updated_is_busy_worker = updated_worker_data[1]['is_busy']
print("Тут Ваш вывод в консоль.")
Второе, проще инвертировать (так понятнее что происходит):
def is_busy(id_worker, is_busy_worker):
new_is_busy = 1 if is_busy_worker == 0 else 0
with connection.cursor() as cursor:
check_query = f"UPDATE stats SET is_busy={new_is_busy} WHERE id = '{id_worker}';"
cursor.execute(check_query)
connection.commit()
# Выводим информацию о том, что состояние изменилось
print(f"worker id: {id_worker} | is busy changed to: {new_is_busy}")