Django Web Framework/Django 일반

Django migrate 잘 쓰기 위한 정리 노트

bluebamus 2023. 12. 15.

 - django에서 db와 연동하여 작업을 하게 되면 반복되는 models.py의 수정과 동기화 문제로 결국 언젠가는 에러가 발생한다. 여러가지 상황에서 

 

 1. 공식 문서에 명시된 옵션과 설명

   - --database DATABASE
      - 마이그레이션할 데이터베이스를 지정합니다. 기본값은 default로 설정됩니다.

   -  --fake
      -  마이그레이션 대상까지의 마이그레이션을 적용된 것으로 표시하지만, 실제로 데이터베이스 스키마를 변경하는 SQL을 실행하지는 않습니다.
      -  이 옵션은 수동으로 변경을 적용하는 경우에 현재 마이그레이션 상태를 직접 조작하기 위해 고급 사용자를 위해 제공됩니다. --fake 옵션을 사용하면 마이그레이션 상태 테이블이 올바르게 동작하지 않을 수 있으므로 주의가 필요합니다.

   -  --fake-initial
      -  모든 모델의 이름과 일치하는 데이터베이스 테이블이 이미 존재하는 경우, 앱의 초기 마이그레이션을 건너뛸 수 있도록 Django에 허용합니다. 이 옵션은 마이그레이션을 사용하기 전에 이미 데이터베이스가 존재하는 경우에 사용될 수 있습니다. 하지만 이 옵션은 테이블 이름만 일치하는지 확인하므로, 초기 마이그레이션에 기록된 스키마와 일치하는지 여부는 확인하지 않으므로, 기존 스키마가 기록된 내용과 일치한다고 확신할 수 있는 경우에만 사용하는 것이 안전합니다.

   -  --plan
      -  주어진 마이그레이션 명령에 대해 수행될 마이그레이션 작업을 보여줍니다.

   -  --run-syncdb
      -  마이그레이션 없이(파일을 생성하지 않고) 앱을 위한 테이블(데이터베이스의 스키마)을 바로 생성할 수 있게 합니다. 이는 권장되지 않지만, 수백 개의 모델이 있는 대규모 프로젝트에서 마이그레이션 프레임워크가 너무 느린 경우에 유용합니다.

   -  --noinput, --no-input
      -  사용자 프롬프트를 모두 억제합니다. 예를 들어, 사용하지 않는 콘텐츠 유형을 제거하는 것에 대한 프롬프트를 표시하지 않습니다.

   -  --check
      -  미적용된 마이그레이션이 감지되면 마이그레이션을 비정상적으로 종료합니다.

   -  --prune
      -  django_migrations 테이블에서 존재하지 않는 마이그레이션을 삭제합니다. 이 옵션은 통합된 마이그레이션으로 대체된 마이그레이션 파일이 제거된 경우 유용합니다. 자세한 내용은 마이그레이션 통합을 참조하십시오.

 

   - python manage.py migrate <app> zero

      - 해당 앱에서 수행된 모든 마이그레이션 파일이 취소되며 데이터베이스 스키마가 처음, 초기 상태로 돌아간다. 만약 zero가 아니라 showmigrations을 통해 확인한 마이그레이션 번호를 입력하면 해당 마이그레이션으로 되돌린다.

 

   - python manage.py showmigrations

      - 프로젝트 안에 있는 모든 앱들의 마이그레이션 히스토리를 확인할 수 있다.

 

   - python manage.py squashmigrations

      - 여러명이 개발을 하게 되거나 여러번의 migrations을 하게 되면 파일이 꼬일 수 있다. 주기적으로 migration tree를 정리해주는 것도 방법이다.

      - from에 정의되는 번호는 마지막으로 변경된 숫자 혹은 지점이 된다.

python manage.py squashmigrations <appname> <squashfrom> <squashto>
python manage.py squashmigrations example 0003 0004

 

      - 파일 명이 마음에 들지 않을 경우 옵션으로 명시할 수 있다.

squashmigrations --squashed-name <SQUASHED_NAME>

 

 

 

 - reference :

https://docs.djangoproject.com/en/5.0/ref/django-admin/

 

Django

The web framework for perfectionists with deadlines.

docs.djangoproject.com

https://wikidocs.net/9926

 

05) 마이그레이션 파일 제거

[TOC] # 마이그레이션 파일 제거 Django 마이그레이션 도구는 모델 관리에 훌륭한 도구이다 그러나 너무 많이 저장소에서 관리하는 것이 때로는 불필요한 문제나 부작용을 일…

wikidocs.net

https://blex.me/@baealex/django-migrate-%EC%9E%98-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

Django migrate 잘 사용하기 — baealex

장고의 migrate 명령어를 제대로 사용하는 것으로 데이터베이스 스키마 변경에 의한 데이터 손실을 줄여 개발 효율성을 높일 수 있다. migrate 명령어와 함께 사용할 수 있는 옵션들과 makemigrations, sh

blex.me

https://it-eldorado.tistory.com/151

 

[오픈갤러리] Django 서버 정리 작업 ④ - 마이그레이션 파일 정리

목차 ⦁ 마이그레이션 파일은 매번 생성되는데... ⦁ 마이그레이션 파일이 많아지면? ⦁ 마이그레이션 관련 명령어 (showmigrations, migrate --fake) ⦁ Step ① 실서버 배포 전 로컬에서 미리 진행해야 하

it-eldorado.tistory.com

https://velog.io/@combi_jihoon/Squashing-migrations

 

Django Docs | Migrations(Squashing) - 2

협업을 하다 보면 migration이 꼬일 때가 있다. 그럴 때는 dependencies를 변경해 주든지 파일명을 변경해 주든지 해야 하는데 무엇보다 migration tree를 깔끔하게 관리하는 것이 중요하다. 만약 이미 prod

velog.io

https://docs.djangoproject.com/en/3.2/topics/migrations/#squashing-migrations

 

Django

The web framework for perfectionists with deadlines.

docs.djangoproject.com

 

댓글