Почему значение поля в модели БД не меняется после вызова session.add() и session.commit() в SQLAlchemy?

Как можно улучшить сброс счетчика до 0 после выполнения определенных условий в данном коде на Python, где счетчик увеличивается до значения 3, но не сбрасывается до 0?
  • 22 апреля 2024 г. 10:40
Ответы на вопрос 2
Если значение поля в модели БД не меняется после вызова `session.add()` и `session.commit()` в SQLAlchemy, возможно, возникла проблема с тем, что вы не присвоили измененное значение обратно в поле модели перед вызовом `session.commit()`. Например:

```python
# Получаем объект из БД
obj = session.query(MyModel).filter_by(id=1).first()

# Изменяем значение поля
obj.field = new_value

# Добавляем изменения к сессии и коммитим их
session.add(obj)
session.commit()
```

Чтобы улучшить сброс счетчика до 0 после выполнения определенных условий, вы можете использовать условие в вашем коде, которое будет проверять текущее значение счетчика и сбрасывать его до 0 при необходимости. Например:

```python
counter = 0

# Увеличиваем счетчик
counter += 1

# Проверяем условие сброса счетчика
if counter >= 3:
    counter = 0

print(counter)
```

Таким образом, при достижении счетчиком значения 3 он будет сбрасываться до 0.
Как выяснилось - всему виной исключение, на которое я не обращал внимания: 
Traceback (most recent call last):
  File "C:\Users\Даниил\Desktop\TelegramBot(тестовое)\venv\lib\site-packages\apscheduler\executors\base_py3.py", line 30, in run_coroutine_job
    retval = await job.func(*job.args, **job.kwargs)
  File "C:\Users\Даниил\Desktop\TelegramBot(тестовое)\monitoring.py", line 31, in checking_apps
    await bot.send_message(id_user, message)
  File "C:\Users\Даниил\Desktop\TelegramBot(тестовое)\venv\lib\site-packages\aiogram\client\bot.py", line 2823, in send_message
    return await self(call, request_timeout=request_timeout)
  File "C:\Users\Даниил\Desktop\TelegramBot(тестовое)\venv\lib\site-packages\aiogram\client\bot.py", line 492, in __call__
    return await self.session(self, method, timeout=request_timeout)
  File "C:\Users\Даниил\Desktop\TelegramBot(тестовое)\venv\lib\site-packages\aiogram\client\session\base.py", line 254, in __call__
    return cast(TelegramType, await middleware(bot, method))
  File "C:\Users\Даниил\Desktop\TelegramBot(тестовое)\venv\lib\site-packages\aiogram\client\session\aiohttp.py", line 178, in make_request
    response = self.check_response(
  File "C:\Users\Даниил\Desktop\TelegramBot(тестовое)\venv\lib\site-packages\aiogram\client\session\base.py", line 128, in check_response
    raise TelegramForbiddenError(method=method, message=description)
aiogram.exceptions.TelegramForbiddenError: Telegram server says - Forbidden: bot was blocked by the user


Не знал, что блокировка бота пользователем может так влиять на работу бота...
Похожие вопросы