Closed bogatyrevata closed 3 weeks ago
Либо удалить все работы мастера вместе с его удалением
def delete_artist(artist_id):
artist_db = Artist.query.get_or_404(artist_id)
if artist_db:
# Удаление всех связанных ArtistWork перед удалением мастера
artist_db.works.delete()
db.session.delete(artist_db)
db.session.commit()
flash("Мастер и его работы успешно удалены!", "success")
else:
flash("Ошибка при удалении мастера!", "danger")
return redirect(url_for(".index"))```
Либо при удалении мастера в работах мастера будет NULL
artist_id = db.Column(db.Integer, db.ForeignKey("artist.id", ondelete="SET NULL"))
# В вашем маршруте для удаления
@admin_courses.route("/delete-artist/<int:artist_id>", methods=["GET"])
def delete_artist(artist_id):
artist_db = Artist.query.get_or_404(artist_id)
if artist_db:
db.session.delete(artist_db)
db.session.commit()
flash("Мастер успешно удален, а связи обновлены на NULL!", "success")
else:
flash("Ошибка при удалении мастера!", "danger")
return redirect(url_for(".index"))```
sqlalchemy.exc.IntegrityError: (pymysql.err.IntegrityError) (1048, "Column 'artist_id' cannot be null") [SQL: UPDATE artistwork SET artist_id=%(artist_id)s WHERE artistwork.id = %(artistwork_id)s] [parameters: [{'artist_id': None, 'artistwork_id': 2}, {'artist_id': None, 'artistwork_id': 3}]] (Background on this error at: https://sqlalche.me/e/20/gkpj)
Ошибка sqlalchemy.exc.IntegrityError: (pymysql.err.IntegrityError) (1048, "Column 'artist_id' cannot be null") возникает, потому что при удалении мастера (Artist) связанная запись в таблице artistwork требует наличие значения в поле artist_id. Однако, удаляя запись мастера, вы оставляете связанные с ним записи ArtistWork без ссылки на artist_id, что вызывает ошибку целостности данных.
Для решения этой проблемы вам нужно либо:
Удалить все связанные записи ArtistWork перед удалением мастера. Обновить связи так, чтобы artist_id в ArtistWork был NULL, если мастер удаляется.