django 1.7 마이그레이션에 "테이블이 이미 있습니다"오류가 발생
마이그레이션을 적용하려고하는데 오류가 발생합니다.
django.db.utils.OperationalError : (1050, " 'customers_customer'테이블이 이미 있습니다.")
다음 명령을 실행하여 이것을 얻습니다.
python manage.py migrate
내 고객 테이블이 이미 존재합니다. 마이그레이션에 오류가 아닌이 사실을 알리고 모델에 대한 수정을 실행하려면 어떻게해야합니까?
나는 문제없이 로컬 데이터베이스를 사용하여 로컬 환경에서 이것을 실행했습니다. migrate
이 오류가 발생하는 것은 데이터베이스를 프로덕션으로 지정하고 실행했을 때 입니다.
데이터베이스에 생성 된 테이블이있는 경우 다음을 실행할 수 있습니다.
python manage.py migrate --fake <appname>
마이그레이션을 실제로 실행하지 않고 실행으로 표시
또는 마이그레이션에서 일부 작업을 피하려면 app / migrations 디렉터리에서 마이그레이션 파일을 편집하고 마이그레이션 실행에서 수행하지 않을 작업에 주석을 달 수 있습니다.
문서 : https://docs.djangoproject.com/en/1.8/topics/migrations/#upgrading-from-south 또는python manage.py help migrate
실제로 python manage.py migrate --fake <appname>
답변에서 언급했듯이이 문제를 두 가지 방법으로 해결할 수 있습니다. 1.) 마이그레이션 파일에서 편집
우리가 만든 각 응용 프로그램에 마이그레이션 폴더가 생성되어 있습니다.이 마이그레이션 폴더에는 마이그레이션 파일 (0001_initial.py가 처음 생성되고이 초기 파일에 종속 된 다른 모든 파일이 생성됩니다), Python manage.py를 실행할 때 migrate, 모든 APP에 대해 파일이 변경되면 마이그레이션 파일이 적용됩니다. 마이그레이션 명령 후 터미널에서이 실행 적용을 볼 수 있습니다. 마이그레이션 파일에 문제가있는 경우 해당 시점에서 오류를 가져 오는 데 사용합니다. 내 / 우리의 경우 :
Applying ValetUser.0002_keyroundslots_systemparameters_vehicleparking_vehicleparkingdetails...Traceback (most recent call last):
sqlite3.OperationalError: table "valet_keyroundslots" already exists
여기에서 문제가있는 파일이 언급되어 있음을 알 수 있습니다. 예를 들어 ValetUser.0002_keyroundslots_systemparameters, 그래서 우리는 앱으로 이동 한 다음 마이그레이션을 할 수 있습니다. 0002 파일에서 우리가 문제에 직면 한 특정 모델의 CreateModel 작업에 대해 주석을 달 수 있습니다. 마이그레이션 적용. 예:
operations = [
# migrations.CreateModel(
# name='KeyRoundSlots',
# fields=[
# ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
# ('key_round', models.IntegerField()),
# ('key_slot', models.IntegerField()),
# ('is_available', models.BooleanField()),
# ('Valet_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='valet_location', to='ValetUser.ValetAt')),
# ],
# options={
# 'db_table': 'valet_keyroundslots',
# },
# ),
2.) 오류 / 문제가 발생한 특정 APP의 수정 된 마이그레이션 파일의 가짜 마이그레이션을 적용함으로써 --fake는 이미 적용된 모델 마이그레이션에 영향을 미치지 않는 가짜 마이그레이션을 적용합니다.
python manage.py migrate --fake <appname>
Waqas와 elmonkeylp에게 주어진 대답도 맞습니다. 시나리오에 사용하는 도움으로 간단히 설명하고 싶습니다.
참고 URL : https://stackoverflow.com/questions/25924858/django-1-7-migrate-gets-error-table-already-exists
'IT TIP' 카테고리의 다른 글
sklearn을 사용하여 PCA에서 explain_variance_ratio_의 기능 이름 복구 (0) | 2020.12.14 |
---|---|
Json.Net에서 PreserveReferencesHandling과 ReferenceLoopHandling의 차이점은 무엇입니까? (0) | 2020.12.14 |
Java 스택 오버플로 오류-Eclipse에서 스택 크기를 늘리는 방법은 무엇입니까? (0) | 2020.12.14 |
Java에서 정적 메서드를 재정의하고 오버로드 할 수 있습니까? (0) | 2020.12.14 |
Ruby에서 스택 추적 객체를 얻는 방법은 무엇입니까? (0) | 2020.12.14 |