сеанс sqlalchemy не распознает изменения в базе данных mysql (выполняется другими процессами) - PullRequest
1 голос
/ 23 августа 2010

Приложение состоит из:

  • основной процесс (python + sqlalchemy), который периодически проверяйте дб (спит больше всего времени)
  • дочерние процессы, которые записывают в db
  • веб-приложение, которое пишет в db

Проблема в том, что сеанс основного процесса, похоже, не регистрирует изменения в БД, выполненные вне этого сеанса. Как обеспечить это? (на данный момент я закрываю и открываю сессию каждый раз, когда процесс просыпается и выполняет свою проверку).

1 Ответ

1 голос
/ 23 августа 2010

Я закрываю и открываю сеанс каждый раз, когда процесс просыпается и проверяет

SQLAlchemy не будет работать так. Изменения отслеживаются в сеансе.

someobj = Session.query(SomeClass).first()

помещает someobj во Session внутренний кеш. Когда вы делаете someobj.attr = val, это отмечает изменение в сеансе, связанное с someobj.

Таким образом, если вы извлекли object1 из некоторого сеанса1, а затем закрыли сеанс1, объект1 больше не связан ни с одним сеансом и не отслеживается.

Лучшим решением будет зафиксировать право на изменение:

object1 = newsession.add(object1)
newsession.commit()

В противном случае вам придется управлять собственным кэшем объектов и объединять их все при каждой проверке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...