SQLAlchemy 允许 null 作为 ForeignKey

SQLAlchemy allow null as ForeignKey

假设我有两个模型

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

如何在某些文档中将 null 设置为 entity_id,如果它具有有效的 entity_id?

null 对子行无效。作为替代方案,创建一个仅用于 'null' 子级的父级并将密钥设置为该 ID。我真的不明白这样做的目的,因为你不想要孤儿记录。如果关系不是真正的一对多与父子关系,那么您应该考虑不同的关系类型或者添加一个字段以使子记录处于非活动状态。

您的 ORM 定义看起来不错,DocumentModel.entity_id 确实可以为空。在这种情况下,我要做的是检查 MySQL 中的实际 table 定义,并确保它与您的 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;