merge в sqlalchemy
Дооброго времени суток! Делаю merge в алхимии, но поведение при этом не могу понять и в документации что-то не нашел ответов... Предположим есть модель с полем many-to-one (детали опущены):
class Parent(Base):
bg_image = relation('Blob')
Когда я делаю merge для объекта Parent то все норм, bg_image (он же Blob) сливается с существующим в базе если он есть и в случае слияния статус Blob - transient.
Но вот когда у Parent появляется поле childrens:
class Parent(Base):
bg_image = relation('Blob')
childrens = relation('Children', cascade='merge')
class Children(Base):
bg_image = relation('Blob', cascade='merge')
Статус у объектов Children такой как я и ожидаю transient но вот статус bg_image у Children всегда pending даже если в базе он есть, вот почему так? разве не должен merge работать рекурсивно? Спасибо!
Дополнение:
# создание основной записи
def create(self, data_parent):
parent = _schema.load(data_parent)
session.merge(parent)
session.flush()
return contest
В моем случае parent создается на основе внешних данных, при этом в данных указаны и childrens также и для них тоже указан Blob, у всех объектов Blob указаны первичные ключи, и получатся так что Bob связанные непосредственно с Parent в коде выше это Parent.bg_image сливаются, а Blob связанные с Children в коде это Children.bg_image создаются через insert