[python] django.db.migrations.exceptions.InconsistentMigrationHistory
python manage.py migrate
Django 프로젝트에서 실행할 때 다음 오류가 발생합니다.
Traceback (most recent call last):
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "/home/hari/project/env/local/lib/python2.7/site- packages/django/core/management/__init__.py", line 363, in execute_from_command_line
utility.execute()
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 355, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 283, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 330, in execute
output = self.handle(*args, **options)
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 86, in handle
executor.loader.check_consistent_history(connection)
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/db/migrations/loader.py", line 298, in check_consistent_history
connection.alias,
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency account.0001_initial on database 'default'.
다음과 같은 사용자 모델이 있습니다.
class User(AbstractUser):
place = models.CharField(max_length=64, null=True, blank=True)
address = models.CharField(max_length=128, null=True, blank=True)
이 문제를 어떻게 해결할 수 있습니까?
답변
데이터베이스의 django_migrations 테이블이 불일치의 원인이며 로컬 경로에서 모든 마이그레이션을 삭제해도 작동하지 않습니다.
데이터베이스에서 django_migrations 테이블을 자른 다음 마이그레이션을 다시 적용해야합니다. 작동해야하지만 그렇지 않으면 makemigrations를 다시 실행 한 다음 마이그레이션합니다.
참고 : 데이터를 백업하는 것을 잊지 마십시오.
답변
사용자 정의 사용자 모델을 사용하고 있으므로 먼저 주석을 달 수 있습니다.
INSTALLED_APPS = [
...
#'django.contrib.admin',
...
]
Installed_Apps 설정에서. 그런 다음 실행
python manage.py migrate.
완료되면 주석 해제
'django.contrib.admin'
답변
이 페이지에있는 대부분의 답변으로 문제를 해결하는 것으로 시작하겠습니다.
당신은 결코 없다 제대로 장고의 마이그레이션 시스템을 사용하는 경우 데이터베이스를 삭제하고 당신이 해야 결코 삭제 마이그레이션 그들은 comitted되면
이제 최상의 솔루션은 Django 사용 경험, 마이그레이션 시스템에 대한 이해 수준, 데이터베이스의 데이터 가치 등 여러 요소에 따라 달라집니다.
간단히 말해서 마이그레이션 오류를 해결할 수있는 두 가지 방법이 있습니다.
-
테이크 핵 옵션을 선택합니다. 경고 : 혼자 작업하는 경우에만 선택할 수 있습니다. 다른 사람이 기존 마이그레이션에 의존하는 경우 삭제할 수 없습니다 .
- 모든 마이그레이션을 삭제하고
python3 -m manage makemigrations
. 이렇게하면 마이그레이션에서 종속성 또는 불일치로 인해 발생한 모든 문제가 제거됩니다. - 전체 데이터베이스를 삭제하십시오. 이렇게하면 실제 데이터베이스 스키마와 마이그레이션 기록을 기반으로해야하는 스키마간에 발생했던 불일치 문제가 제거되고 마이그레이션 기록과 이전 마이그레이션 파일 사이의 불일치 문제가 제거됩니다. 에
InconsistentMigrationHistory
대해 불평하고 있습니다]. - 다음을 사용하여 데이터베이스 스키마를 다시 만듭니다.
python3 -m manage migrate
- 모든 마이그레이션을 삭제하고
-
오류의 원인을 확인하고 해결하십시오. (경험을 통해 말하면) 원인은 거의 확실히 당신 이 어리석은 일이기 때문 입니다. (일반적으로 마이그레이션 시스템을 올바르게 사용하는 방법을 이해하지 못한 결과). 내가 야기한 오류에 따라 세 가지 범주가 있습니다.
- 마이그레이션 파일과 불일치. 이것은 여러 사람이 한 프로젝트에서 작업 할 때 매우 일반적입니다. 변경 사항이 충돌하지 않고이
makemigrations --merge
문제를 해결할 수 있기를 바랍니다 . 그렇지 않으면 누군가이 문제를 해결하기 위해 마이그레이션을 분기 지점으로 롤백해야합니다. - 스키마와 마이그레이션 기록 사이의 불일치. 이를 관리하기 위해 누군가 데이터베이스 스키마를 수동으로 편집하거나 마이그레이션을 삭제해야합니다. 마이그레이션을 삭제 한 경우 변경 사항을 되돌리고 소리를 지르십시오. 다른 사람이 마이그레이션에 의존하는 경우 마이그레이션을 삭제 해서는 안됩니다 . 데이터베이스 스키마를 수동으로 편집 한 경우 변경 사항을 되 돌린 다음 소리를 지르십시오. Django는 데이터베이스 스키마를 관리하고 있습니다.
- 마이그레이션 기록과 마이그레이션 파일 간의 불일치. [이것이
InconsistentMigrationHistory
질문자가 겪는 문제이고 내가이 페이지에 도착했을 때 겪었던 문제입니다]. 이를 관리하기 위해 누군가가 수동으로django_migrations
테이블을 엉망으로 만들 거나 적용된 후 마이그레이션 을 삭제했습니다 . 이 문제를 해결하려면 불일치가 어떻게 발생했는지 파악하고 수동으로 해결해야합니다. 데이터베이스 스키마가 올 바르고 마이그레이션 기록이 잘못된 경우django_migrations
테이블을 수동으로 편집 하여이 문제를 해결할 수 있습니다 . 데이터베이스 스키마가 잘못된 경우 수동으로 편집하여 있어야하는 것과 일치해야합니다.
- 마이그레이션 파일과 불일치. 이것은 여러 사람이 한 프로젝트에서 작업 할 때 매우 일반적입니다. 변경 사항이 충돌하지 않고이
문제에 대한 설명과 선택한 답변에 따라 혼자 작업하고 있으며 Django를 처음 사용하며 데이터에 신경 쓰지 않는다고 가정하겠습니다. 따라서 핵 옵션이 귀하에게 적합 할 수 있습니다.
이 상황이 아니고 위의 텍스트가 횡설수설처럼 보인다면 Django 사용자의 메일 링리스트 에 도움을 요청하는 것이 좋습니다 . 당신이 처한 특정 문제를 해결하는 데 도움을 줄 수있는 매우 도움이되는 사람들이 있습니다.
믿음을 가지세요. 핵을 사용하지 않고도이 오류를 해결할 수 있습니다!
답변
이 문제를 올바르게 해결하는 방법.
프로젝트 내의 마이그레이션 폴더에서 다음 단계를 따르십시오.
- _pycache_ 및 0001_initial 파일을 삭제하십시오.
- 루트 디렉토리에서 db.sqlite3를 삭제합니다 (모든 데이터가 없어 지도록주의하십시오).
- 터미널에서 실행 :
- python manage.py makemigrations
python manage.py migrate
짜잔.
답변
이것은 django 문서의 권장 사항에 따라 사용자 지정 사용자 모델을 추가 한 후 새 프로젝트에서 나에게 발생했습니다.
새 프로젝트를 시작하는 경우 기본 사용자 모델이 충분하더라도 사용자 지정 사용자 모델을 설정하는 것이 좋습니다.
문제를 해결하기 위해 제가 한 일이 있습니다.
- db.sqlite3 데이터베이스를 삭제합니다.
- 앱 / 마이그레이션 폴더를 삭제합니다.
@jackson에 따라 django.contrib.admin을 임시로 주석 처리하십시오.
INSTALLED_APPS = [
...
#‘django.contrib.admin’,
...
]
또한 urls.py에서 관리 사이트를 주석 처리하십시오.
urlpatterns = [
path('profile/', include('restapp.urls')),
#path('admin/', admin.site.urls),
]
경로 ( ‘admin /’)를 주석 처리하지 않으면 실행시 “LookupError : No installed app with label ‘admin'”오류가 발생합니다.
python manage.py migrate
마이그레이션이 완료되면 위의 두 가지 주석을 모두 제거하십시오.
답변
문제
django.db.migrations.exceptions.InconsistentMigrationHistory : 마이그레이션 admin.0001_initial이 해당 종속성 account.0001_initial 데이터베이스 ‘default’보다 먼저 적용됩니다.
따라서 먼저 admin (admin.0001_initial)없이 데이터베이스를 마이그레이션 할 수 있습니다.
종속성이 마이그레이션 된 후 명령을 실행하여 admin.0001_initial
.
해결책
- settings.py의 INSTALLED_APPS에서 ‘django.contrib.admin’을 제거하십시오.
- 명령 실행 :
Python manage.py makemigrations appname
Python manage.py 마이그레이션 앱 이름
- settings.py 파일의 INSTALLED_APPS에 ‘django.contrib.admin’을 추가하십시오.
- 명령을 다시 실행하십시오.
Python manage.py makemigrations appname
Python manage.py 마이그레이션 앱 이름
답변
sqlite 파일을 삭제하거나 databse ‘python manage.py flush’를 플러시 한 다음 makemigrations 및 migrate 명령을 각각 실행하십시오.