假设我有两个模型
class EntityModel(DB.Model):
id = DB.Column(DB.Unicode(37), primary_key=True)
class DocumentModel(DB.Model):
id = DB.Column(DB.Unicode(37), primary_key=True)
entity_id = DB.Column(DB.Unicode(37), DB.ForeignKey('entity.id', ondelete='cascade'), nullable=True)
entity = DB.relationship('EntityModel')
我可以使用entity_id NULL创建新文档。但是,一旦我将有效的entity_id设置为该文档,我就不能再将其归零。我收到错误:
Cannot add or update a child row: a foreign key constraint fails
如果某个文档中的entity_id有有效的entity_id,我怎样才能将null设置为entity_id?
答案 0 :(得分:7)
您的ORM定义看起来很好,DocumentModel.entity_id确实可以为空。在这种情况下我要做的是检查MySQL中的实际表定义,并确保它与您的ORM定义一致,例如。
-- make sure DocumentModel.entity_id is nullable :
SHOW CREATE TABLE DocumentModel\G
UPDATE DocumentModel.entity_id SET entity_id = NULL WHERE entity_id = XXX;
答案 1 :(得分:0)
null对子行无效。作为替代方案,制作一个仅用于' null'孩子并设置该ID的关键。我不太了解这个目的,因为你不想要孤儿唱片。如果父关系中的关系实际上不是1对多,则应考虑使用不同的关系类型,或者添加字段以使子记录处于非活动状态。