SQLAlchemy не помечает сессию как грязную для измененного атрибута - PullRequest
0 голосов
/ 07 января 2019

При попытке изменить объект, загруженный с помощью SQLAlchemy, объект session.dirty ведет себя не так, как я ожидал:

o = sqla.session.query(sqla.Game).first()
  <sqla.Game at 0x7fdcc1f707b8>
o.wiki
 <null>
o.wiki = 'test'
o.wiki
  'test'
sqla.session.is_modified(o)
  False
sqla.session.dirty
  IdentitySet([])    
inspect(o).attrs['wiki'].history
  History(added=(), unchanged=['test'], deleted=())

Передача этого в базу данных фактически обновляет ее, но мне действительно неясно, почему она помечена как «без изменений». Если я изменю отношение к объекту, оно будет правильно отображаться в «новых» и «удаленных» областях истории. Я загружаю модели через autop, и сеанс не имеет автоматической фиксации.

Я также пытался вручную вызвать flag_modified и указать столбец напрямую (без автоматического ввода), но безрезультатно.

1 Ответ

0 голосов
/ 07 января 2019

И я понял это. У меня было autoflush по умолчанию. Превращение в False устранило проблему.

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