2つのモデルがあるとしましょう
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_idNULLで新しいドキュメントを作成できます。しかし、有効なentity_idをそのドキュメントに設定すると、それをnullに戻すことはできなくなります。エラーが発生します:
Cannot add or update a child row: a foreign key constraint fails
有効なentity_idがある場合、ドキュメントのentity_idにnullを設定するにはどうすればよいですか?
oRM定義は問題ないように見えますが、DocumentModel.entity_idは実際にnull許容です。この場合、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;
nullは子行には無効です。別の方法として、「null」の子にのみ使用される親を作成し、そのIDにキーを設定します。あなたが孤児の記録を望まないので、私はこれの目的を本当に理解していません。親子関係との関係が実際には1対多ではない場合は、別の関係タイプを検討するか、フィールドを追加して子レコードを非アクティブにする必要があります。