django 1.7 migrate obtient l'erreur " la table existe déjà"

j'essaie d'appliquer une migration mais j'obtiens l'erreur:

django.DB.utils.OperationalError: (1050, "Table ' customers_customer' il existe déjà")

je l'obtenir en exécutant la commande suivante:

python manage.py migrate

ma table client existe déjà, alors que dois-je faire pour le faire savoir à la migration, pas faire une erreur, et lancer ma modification sur mon modèle?

j'ai lancé ceci sur mon environnement local avec une base de données locale sans problème. C'est quand j'ai pointé ma base de données vers la production et couru migrate au-dessus de cela je reçois cette erreur.

45
demandé sur dietbacon 2014-09-19 05:13:59

3 réponses

Si vous avez la table créée dans la base de données, vous pouvez exécuter

python manage.py migrate --fake <appname>

Cocher les migrations comme courir sans réellement en cours d'exécution

ou si vous voulez éviter certaines actions dans votre migration, vous pouvez éditer le fichier migration sous le répertoire app/migrations et commenter les opérations que vous ne voulez pas faire dans l'exécution de migration.

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

92
répondu elmonkeylp 2015-11-26 19:49:59

le python manage.py migrate --fake <appname>

12
répondu Waqas Javed 2015-10-03 15:25:53

nous pouvons résoudre ce problème de deux façons, comme mentionné dans la réponse: 1.) En éditant dans le fichier de migration

nous avons créé le dossier migrations dans chaque application que nous créons, ces migrations dossier le fichier de migration(0001_initial.py est le initialement créé et après cela tous les autres fichiers dépendants de ce le fichier initial sera create), lorsque nous exécutons le python manage.py migrer, pour chaque application le fichier de migration s'appliquera s'il y a modifier dans le fichier. Nous peut voir cette course S'appliquer sur le terminal après le migrer de commande. Si il y a un problème dans le fichier de migration que nous utilisons pour obtenir l'erreur à ce point. Dans mon/notre cas:

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

ici nous pouvons remarquer que le dossier dans lequel nous avons le problème est mentionné j'.e ValetUser.0002_keyroundslots_systemparameters, de sorte que nous pouvons aller à la App et ensuite migrations et dans le fichier 0002 nous pouvons Commenter le CreateModel fonctionnement de ce modèle particulier dans lequel nous sommes confrontés à la question alors appliquer les migrations. exemple:

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.) En appliquant la fausse migration du fichier de migration modifié de l'application particulière dans laquelle nous sommes confrontés à l'erreur/problème, -- faux Testament appliquer la fausse migration qui n'aura pas d'effet sur la déjà appliquée la migration du modèle.

python manage.py migrate --fake <appname>

les réponses données Waqas et elmonkeylp sont également bonnes, je veux juste expliquer en bref avec l'aide de nous utiliser pour scénario

2
répondu Vinay Kumar 2018-08-08 09:41:13