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 способ справиться с этим? Я не могу найти ничего актуального в документах. Это все о настройке отношений.
Редактировать: Обновлен код с примерами классов. В моем случае я использую составной первичный ключ, но это должно быть проблемой. Ошибка жалуется на ребенка, не имеющего идентификатор.