SQLAlchemy разрешает null как 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')
Я могу создать новый Document с сущностью_NULL. Но как только я установил действительный entity_id в этот документ, я больше не могу его вернуть. Я получаю сообщение об ошибке:
Cannot add or update a child row: a foreign key constraint fails
Как я могу установить null в entity_id в каком-то документе, если он имеет действительный entity_id?
Ответы
Ответ 1
ваше определение 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;
Ответ 2
null недействительно для дочерней строки. В качестве альтернативы создайте родителя, который используется только для дочерних элементов "null" и установите ключ для этого идентификатора. Я не совсем понимаю цель этого, так как вы не хотите сиротских записей. Если отношения не являются действительно 1 для многих с родительскими отношениями с потомками, тогда вы должны рассмотреть другой тип отношения или, возможно, добавить поле, чтобы сделать дочерние записи неактивными.