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


Ответы (0 шт):