web-dev-qa-db-fra.com

Django 1.8 Migration ne crée pas de tables

yekabathula-macbookair2:roster yekabathula$ python manage.py migrate
Operations to perform:
  Synchronize unmigrated apps: staticfiles, messages
  Apply all migrations: admin, contenttypes, api, auth, sessions
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
  Installing custom SQL...
Running migrations:
  Rendering model states... DONE
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying api.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying sessions.0001_initial... OK
yekabathula-macbookair2:roster yekabathula$ python manage.py syncdb
/Library/Python/2.7/site-packages/Django/core/management/commands/syncdb.py:24: RemovedInDjango19Warning: The syncdb command will be removed in Django 1.9
  warnings.warn("The syncdb command will be removed in Django 1.9", RemovedInDjango19Warning)

Operations to perform:
  Synchronize unmigrated apps: staticfiles, messages
  Apply all migrations: admin, contenttypes, api, auth, sessions
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
  Installing custom SQL...
Running migrations:
  No migrations to apply.

Après avoir migré python manage.py, les tables ne sont pas créées dans la base de données à partir de mon modèles.py est capable de créer d’autres tables à partir de Django_session etc. Y at-il autre chose que je dois suivre ici?

19
YSK

Je rencontrais un problème similaire dans Django 1.10 et aucune des solutions ci-dessus ne fonctionnait pour moi.

Ce qui a finalement fonctionné a été d'exécuter cette commande:

python manage.py migrate --fake myappname zero

Ceci réinitialise toutes les migrations (à l'état zéro) 

Ce suivi par:

python manage.py migrate myappname

créé les tables pour moi.

Si vous ne souhaitez pas restaurer l'état initial (zéro) mais indiquer le numéro de migration 0005 (la dernière migration ayant fonctionné), vous pouvez procéder comme suit:

python manage.py migrate --fake myappname 0005

Et ensuite procéder à la migration réelle:

python manage.py migrate myappname

Plus de détails dans la docs

78
bhaskarc

Dans mon cas, le fichier __init__.py était absent du dossier APP/migrations /. Si vous n'en avez pas, tout ce dont vous avez besoin est d'un fichier __init__.py vide.

13
Ljubitel

j'ai rencontré le même problème… .. Après de nombreuses recherches, j'ai trouvé la solution… .. J'utilise Django 1.11,

Si vous voulez recommencer,

1)delete all the files in your migrations folder except __init__.py
2)drop database
3)create database
4)python makemigrations
5)python migrate

si vous avez reset_db, vous pouvez utiliser reset_db au lieu des 2ème et 3ème étapes.

python manage.py reset_db

4

J'ai eu un problème similaire et je l'ai compris. J'ai plusieurs bases de données. Mon local (celui qui n'est pas mis à jour) est une base de données MySQL. Les autres sont MS SQL Server et MySQL. J'ai des routeurs vers les autres bases de données car je ne les gère pas et j'avais (dans Django 1.6) utilisé les routeurs pour indiquer allow_sync () = False. Avec 1.7, j'ai changé cela en allow_migrate () = False. MAIS I DID N'ajoutez pas de routeur pour ma base de données locale La valeur par défaut semble être allow_migrate () = False s'il n'en existe pas. En conséquence, les migrations ont simplement échoué en silence (Référence: https://docs.djangoproject.com/fr/1.7/topics/db/multi-db/ ). J'ai ajouté un routeur pour ma base de données locale, en permettant à allow_migrate () de renvoyer la valeur True. Désormais, mes migrations créent réellement mes tables.

3
user3130740

Cela a résolu le problème pour moi (j'utilise MySQL Workbench en passant):

  • Exécutez ce sql: SET FOREIGN_KEY_CHECKS = 0;
  • Sélectionnez toutes les tables de votre base de données Django (cliquez sur la première table, puis maintenez enfoncée la touche Maj, puis cliquez sur la dernière table). Puis faites un clic droit et choisissez "Déposer n tables" (où n est le nombre de tables que vous venez de sélectionner)
  • puis lancez python manage.py migrate
  • Enfin, restaurez les paramètres de vérification de la clé étrangère en exécutant ce sql: SET FOREIGN_KEY_CHECKS = 1;

Remarque: avant de prendre cette mesure drastique, j’essayais de ce que Paulo Pessoa disait dans son commentaire, mais j’ai toujours le message "Aucune migration à appliquer". messages. Cependant, cela a résolu le problème.

1
Sнаđошƒаӽ
  • Supprimer les tables existantes des modèles.

  • Supprimer le dossier de migration sous le dossier d'application.

  • Supprimer tous les enregistrements de migration associés dans la table
    "Django_migrations".

  • Maintenant, vous obtenez un modèle et une base de données clairs. Utilisez makemigrations et migrateto create table.

J'espère vous aider.

1
Robin Wu Yu

Problème:: Lorsque vous appliquez migrations dans Django pour le première fois, Django crée une table de ce modèle dans la base de données et marque quelque part dans son propre fichier (classe):

`initial = True` 
  • Lorsque vous essayez ensuite de modifier le schéma de cette table, il vérifie d’abord If initial = True 

  • si un attribut de classe initial n’est pas trouvé, une migration sera considérée "initiale"

  • Au cas où le initial = True nous devions utiliser

    python manage.py migrate --fake-initial
    

Pour une migration initiale, Django vérifie que toutes ces tables existent déjà dans la base de données et fake-applique la migration si tel est le cas. De même, pour une migration initiale qui ajoute un ou plusieurs champs, Django vérifie que toutes les colonnes respectives existent déjà dans la base de données et fake-applique la migration si tel est le cas. 

La migration initiale fictive utilise les méthodes CreateModel () et AddField (). 


Solution:

>> python manage.py makemigrations <AppName>
>> python manage.py migrate --fake-initial
1
Zahid Khan
  1. Supprimer la base de données
  2. supprimer le dossier migration
  3. lancer la commande migrate
  4. lancer la commande makemigrations
  5. lancer la commande migrate

Il va créer toutes les tables parfaitement

0