SQL Alchemy: DatabaseError при добавлении родителя и потомка в одном сеансе - PullRequest
1 голос
/ 08 ноября 2019

SQL Alchemy генерирует DatabaseError, когда я одновременно удаляю и дочерний, и родительский из сеанса.

class Parent(Base):
    __tablename__ = 'parents'

    # Primary key - using two columns
    id = Column(Integer, primary_key=True, autoincrement=True)
    split_id = Column(Integer, primary_key=True, autoincrement=False, default=0, server_default='0')

    # Other columns...

class Child(Versioned, Base):
    __tablename__ = 'children'
    id = Column(Integer, primary_key=True, autoincrement=True)
    parent_id = Column(Parent.id.type, nullable=False)
    parent_split_id = Column(Parent.split_id.type, nullable=False)

    __table_args__ = (
        ForeignKeyConstraint(
            [parent_id, parent_split_id],
            [Parent.id, Parent.split_id],
            onupdate='cascade',
        ),
    )

    # Other columns...

    parent = relationship(
        'Parent',
        backref=backref('children'),
    )

parent = Parent()
parent.child = Child()

session.add(parent)
session.flush() # sqlalchemy.exc.DatabaseError: (mysql.connector.errors.DatabaseError) 1364 (HY000): Field 'child_id' doesn't have a default value

Я анализирую электронную таблицу и просто добавляю все новое в сеанс, а затем фиксирую вконец. Я уверен, чтобы повторно использовать объекты. Но id не будет назначен до тех пор, пока я не выполню session.flush(), а когда я выполню session.flush(), мои родительские объекты также будут сброшены, потому что есть связь с backpopulates.

Что правильноАлхимия sql способ справиться с этим? Я не могу найти ничего актуального в документах. Это все о настройке отношений.

Редактировать: Обновлен код с примерами классов. В моем случае я использую составной первичный ключ, но это должно быть проблемой. Ошибка жалуется на ребенка, не имеющего идентификатор.

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