При вызове функции в 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}")
→ Ссылка