Как я могу удалить ребенка в реляционной многим к одному в SQLAlchemy? - PullRequest
0 голосов
/ 13 июня 2019

Во-первых, у меня есть таблицы, подобные приведенным ниже:

 class Parent(db.Model):
    __tablename__= "parent"

    id = db.Column("parent_id", db.Integer, primary_key=True)
    childFirst = db.Column(db.Integer, db.ForeignKey('childFirst.childFirst_id'))
    childSecond = db.Column(db.Integer, db.ForeignKey('childSecond.childSecond_id'))
    childThird = db.Column(db.Integer, db.ForeignKey('childThird. childThird_id'))

    child_first = db.relationship("ChildFirst")
    child_second = db.relationship("ChildSecond")
    child_third = db.relationship("ChildThird")

 class ChildFirst(db.Model):
    __tablename__ = "childFirst"

    id = db.Column("childFirst_id", db.Integer, primary_key=True)
    ...

 class ChildSecond(db.Model):
    __tablename__ = "childSecond"

    id = db.Column("childSecond_id", db.Integer, primary_key=True)
    ...

 class ChildThird(db.Model):
    __tablename__ = "childThird"

    id = db.Column("childThird_id", db.Integer, primary_key=True)
    ...

Итак, я выстраиваю отношения многие к одному, как описано здесь

Но когда я пытаюсь удалить однуЧайлдс Я получаю сообщение об ошибке:

'Cannot delete or update a parent row: a foreign key constraint fails (`<DB_NAME>`.`<PARENT_NAME>`, CONSTRAINT `<PARENT_NAME>_ibfk_3` FOREIGN KEY (`<CHILD_ID_COLUMN>`) REFERENCES `<CHILD_TABLE_NAME>` (`<CHILD_ID_COLUMN>`))')
[SQL: DELETE FROM CHILD_TABLE_NAME WHERE <CHILD_TABLE_NAME>.<CHILD_ID_COLUMN> = %(<CHILD_ID_COLUMN>_1)s]

И на самом деле я пытаюсь удалить ребенка с помощью этой команды -> CHILD_CLASS.query.filter_by(id=<id_variable>).delete()

Наконец, я использую базу данных mysql.

Итак, что не так?

Спасибо и наилучшими пожеланиями ..

1 Ответ

0 голосов
/ 13 июня 2019

Когда я удаляю дочернюю строку, я удаляюсь успешно.

Код:

child = <CHILD_CLASS>.query.filter_by(id=<id>).first()
db.session.delete(child)
db.session.commit()

Но в чем разница?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...