IT TIP

django 1.7 마이그레이션에 "테이블이 이미 있습니다"오류가 발생

itqueen 2020. 12. 14. 21:27
반응형

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

반응형