SQLAlchemy允许null作为ForeignKey

时间:2015-04-21 18:03:16

标签: sql sqlalchemy foreign-keys foreign-key-relationship

假设我有两个模型

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?

2 个答案:

答案 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对多,则应考虑使用不同的关系类型,或者添加字段以使子记录处于非活动状态。