python - SQL Alchemy:在同一会话中添加父项和子项时出现 DatabaseError
问题描述
当我同时从会话中刷新子项和父项时,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
我执行 a 之前不会分配session.flush()
,当我执行时,session.flush()
我的父对象也会被刷新,因为与 有关系backpopulates
。
处理这个问题的正确 sql alchemy 方法是什么?我在文档中找不到任何相关内容。一切都是为了建立关系。
编辑:使用类示例更新代码。就我而言,我使用复合主键,但这应该是一个问题。该错误抱怨孩子没有身份证。
解决方案
推荐阅读
- javascript - JS 动态隐藏/删除具有相同类名的 div
- javascript - 信息框上的 CSS 悬停效果但颜色不同
- google-sheets - 以编程方式旋转并在 Google 表格摘要中携带颜色信息
- php - 带有 InstagramLive-PHP 的 Nginx RTMP 无法正常工作
- c# - 在 .NET Core / EF Core 2.1 中协调不同业务服务之间的原子事务的最佳方式?
- spring - 如何在没有不必要的零的情况下在 Thymeleaf 中格式化小数
- java - 在Java中索引类的问题
- python - 在 Python 中更改轴值和标签的位置
- arrays - 过滤反应原生数据
- excel - 在子中访问打开的工作簿有时会生成错误 1004“对象 '_Global' 的 'Sheets' 方法未失败”