[django-mysql] 1452 에러 / 1091 에러

nikevapormax·2023년 1월 2일
0

TIL

목록 보기
105/116
post-custom-banner

상황

  • 기존에 짜놨던 모델(SalaryPaymentDetailEmployee)을 수정하게 되었다.
    • 기존에 사용하던 year, month 필드를 삭제한다.
    • salary_group 필드를 생성한다. (ForeignKey)
  • 따라서 기존 필드를 삭제하고 새 필드를 만들어 마이그레이션을 진행했다.
    • 진행하는 과정에서 ForeignKey의 값을 멍청하게 그냥 디폴트값을 적용하였다.
      - 1452 에러 발생 : SalaryGroup 데이터베이스에 있는 값을 사용했다면 에러가 없을 수도 있었지만, 아예 없는 값을 넣어버렸다.
        mysql.connector.errors.integrityerror: 1452 (23000): cannot add or update a child row: a foreign key constraint fails
    • 마이그레이션 에러가 나게 되면서 아차싶어 null=True를 적용해 다시 마이그레이션을 진행하려 했으나, 이미 기존 필드는 데이터베이스 상에서는 삭제된 상태여서 그 다음 마이그레이션이 진행되지 않았다.
      - 1091 에러 발생 : 데이터베이스 상에서는 이미 없는 컬럼인데 자꾸 지우려 하니 에러 발생
        pymysql.err.OperationalError: (1091, "Can't DROP 'month'; check that column/key exists")

해결

  • 이미 데이터베이스 단에서는 year, month 필드가 삭제된 상태이니 python manage.py migrate --fake를 통해 마이그레이션을 적용시켜 준다.
  • 내가 새롭게 생성하려 하는 필드를 작성하고 다시 마이그레이션을 진행해준다. (디폴트 값을 주지 않고 null=True를 주어 에러를 피했다.)

참고 레퍼런스

profile
https://github.com/nikevapormax
post-custom-banner

0개의 댓글