django django-south django-1.7 django-migrations

django 1.7 migrate obtiene el error "la tabla ya existe"



django-south django-1.7 (3)

Podemos resolver este problema de dos maneras como se menciona en la respuesta: 1.) Editando en el archivo de migración

Tenemos una carpeta de migraciones creada en cada aplicación que creamos. En esas carpetas de migración, el archivo de migración (0001_initial.py es el creado inicialmente y después de esto se crearán todos los demás archivos que dependen de este archivo inicial), cuando ejecutamos el python manage.py migrar, para cada aplicación, el archivo de migración se aplicará si hay un cambio en el archivo. Podemos ver esta ejecución Aplicando en la terminal después del comando migrate. Si hay algún problema en el archivo de migración que usamos para obtener el error en ese punto. En mi / nuestro caso:

Applying ValetUser.0002_keyroundslots_systemparameters_vehicleparking_vehicleparkingdetails...Traceback (most recent call last): sqlite3.OperationalError: table "valet_keyroundslots" already exists

Aquí podemos notar que se menciona el archivo en el que tenemos un problema, es decir, ValetUser.0002_keyroundslots_systemparameters, para que podamos ir a la aplicación y luego migraciones y en el archivo 0002 podemos comentar la operación CreateModel de ese modelo en particular en el que nos enfrentamos al problema aplicando migraciones. ejemplo:

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.) Al aplicar la migración falsa del archivo de migración modificado de la aplicación particular en la que nos enfrentamos al error / problema, --fake aplicará la migración falsa que no afectará a la migración ya aplicada del modelo.

python manage.py migrate --fake <appname>

Las respuestas dadas Waqas y elmonkeylp también son correctas, solo quiero explicarlo brevemente con la ayuda de los escenarios.

Estoy intentando aplicar una migración pero recibo el error:

django.db.utils.OperationalError: (1050, "La tabla ''clients_customer'' ya existe")

Obtengo esto emitiendo el siguiente comando:

python manage.py migrate

Mi tabla de clientes ya existe, así que, ¿qué debo hacer para que la migración sepa esto, no se produzca un error, y ejecute mi modificación en mi modelo?

Ejecuté esto en mi entorno local con base de datos local sin ningún problema. Es cuando señalé mi base de datos a producción y ejecuté migrate arriba cuando recibí este error.


En realidad es python manage.py migrate --fake <appname>


Si tiene la tabla creada en la base de datos, puede ejecutar

python manage.py migrate --fake <appname>

Marcar migraciones como ejecutadas sin ejecutarlas realmente

O si desea evitar algunas acciones en su migración, puede editar el archivo de migración en el directorio de aplicaciones / migraciones y comentar las operaciones que no desea realizar en la ejecución de la migración.

Documentos: https://docs.djangoproject.com/en/1.8/topics/migrations/#upgrading-from-south o python manage.py help migrate