PickleType с изменяемым отслеживанием в SqlAlchemy
У меня есть проект, в котором я хотел бы хранить большую структуру (вложенные объекты) в реляционном БД (Postgres). Это'часть большей структуры, и я недействительно не волнует формат сериализации - яя рад, что это капля в столбце - яЯ просто хотел бы быть в состоянии сохранить и восстановить его довольно быстро.
Для моих целей SQLAlchemy PickleType в основном выполняет свою работу. У меня проблема в том, что яМне бы хотелось, чтобы грязные проверки работали (то, для чего используются изменяемые типы). Я'Мне бы хотелось, чтобы они работали не только, если я изменю информацию в путях, но также и в границах (которые усаживаются на другой уровень вниз). Я '
class Group(Base):
__tablename__ = 'group'
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False)
paths = Column(types.PickleType)
class Path(object):
def __init__(self, style, bounds):
self.style = style
self.bounds = bounds
class Bound(object):
def __init__(self, l, t, r, b):
self.l = l
self.t = t
self.r = r
self.b = b
# this is all fine
g = Group(name='g1', paths=[Path('blah', Bound(1,1,2,3)),
Path('other_style', Bound(1,1,2,3)),])
session.add(g)
session.commit()
# so is this
g.name = 'g2'
assert g in session.dirty
session.commit()
# but this won't work without some sort of tracking on the deeper objects
g.paths[0].style = 'something else'
assert g in session.dirty # nope
мы поиграли с изменчивыми типами, пытаясь заставить его работать, но покамне не повезло. В других местах я использую изменяемые типы для столбца json, что хорошо - таким образом, который кажется более простым, потому что с этими классами вам также нужно отслеживать изменения в объектах внутри объектов.
Любые мысли приветствуются.