Django migrate 잘 쓰기 위한 정리 노트
- 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/
https://blex.me/@baealex/django-migrate-%EC%9E%98-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0
https://it-eldorado.tistory.com/151
https://velog.io/@combi_jihoon/Squashing-migrations
https://docs.djangoproject.com/en/3.2/topics/migrations/#squashing-migrations
'Django Web Framework > Django 일반' 카테고리의 다른 글
웹 애플리케이션의 성능 지표 및 측정 (측정 도구) (0) | 2024.02.01 |
---|---|
django에서 db row lock을 실행할 수 있는 방법 (0) | 2023.12.18 |
allauth를 사용해 production 등록을 할 때 400 error가 발생하는 경우 (0) | 2023.08.09 |
django template cache 사용방법 (MPTT 적용) (0) | 2023.03.17 |
Django 로깅 적용하기 (0) | 2021.07.07 |
댓글