У меня проблема с обновлением экземпляра в sqlalchemy.Атрибуты экземпляра изменяются после того, как я изменяю их перед фиксацией, но после того, как я фиксирую их, они возвращаются к предыдущим значениям.Session.is_modified (instance) тоже возвращает False даже после обновления данных.
Вот код
from sqlalchemy.orm import sessionmaker, scoped_session
class Backend(object):
"""
"""
def __init__(self):
self._engine = create_engine("mysql://{0}:{1}@{2}/{3}?charset=utf8".format(DATABASE_CONFIGS.get('master').get('USER'),
DATABASE_CONFIGS.get('master').get('PASSWORD'),
DATABASE_CONFIGS.get('master').get('HOST'),
DATABASE_CONFIGS.get('master').get('DB_NAME')),
pool_recycle=3600,
pool_size= POOL_SIZE,
pool_timeout=1,
echo=False,
convert_unicode=True,
encoding='utf-8')
def get_session(self):
self._session = scoped_session(sessionmaker(bind=self._engine))
return self._session
class A():
attribute_meta = Column(JSONField(), nullable=True)
Вот как этот код выполняется:
def foo():
backend = Backend()
session = backend.get_session()
a = session.query(A).first()
a.attribute_meta = {'boo':'foo'}
session.add(a)
print("data before commit", a.attribute_meta)
print("is session modified", session.is_modified(a))
print("data after commit", a.attribute_meta)
session.commit()
session.close()
при изменении сеанса возвращает False
данные до того, как коммит возвращает измененный экземпляр с соответствующими данными
данные после того, как коммит возвращает экземпляр с его исходным значением, то есть без изменения
Если я запускаю тот же кодчерез оболочку он работает нормально.
Нет модели сигналов, которые могли бы изменить данные.
Включил echo = True, но все показывает, что это просто команда выбора, которая запускаетсяБД.
Что-то мне не хватает?