79 votes

Pourquoi don ' t ma migration sud travaille ?

Tout d'abord, j'ai créer ma base de données.

create database mydb;

- Je ajouter "sud" pour les Applications installées. Ensuite, je vais de ce tutoriel: http://south.aeracode.org/docs/tutorial/part1.html

Le tutoriel me dit de faire ceci:

$ py manage.py  schemamigration wall --initial
>>> Created 0001_initial.py. You can now apply this migration with: ./manage.py migrate wall

Super, maintenant je migrer.

$ py manage.py migrate wall

Mais il me donne cette erreur...

django.db.utils.DatabaseError: (1146, "Table 'fable.south_migrationhistory' doesn't exist")

Donc j'utilise Google (qui ne fonctionne jamais. d'où mon 870 questions posées sur Stackoverflow), et j'obtiens cette page: http://groups.google.com/group/south-users/browse_thread/thread/d4c83f821dd2ca1c

Bon, j'suivre que les instructions

>> Drop database mydb;
>> Create database mydb;
$ rm -rf ./wall/migrations
$ py manage.py syncdb

Mais quand je lance syncdb, Django crée un groupe de tables. Oui, il crée le south_migrationhistory table, mais il crée aussi mon application tables.

Synced:
 > django.contrib.admin
 > django.contrib.auth
 > django.contrib.contenttypes
 > django.contrib.sessions
 > django.contrib.sites
 > django.contrib.messages
 > south
 > fable.notification
 > pagination
 > timezones
 > fable.wall
 > mediasync
 > staticfiles
 > debug_toolbar

Not synced (use migrations):
 - 
(use ./manage.py migrate to migrate these)

Cool....maintenant, il me dit de migrer ces. Donc, je fais ceci:

$ py manage.py  migrate wall
The app 'wall' does not appear to use migrations.

Bon, très bien. Je vais ajouter un mur à la formation initiale des migrations.

$ py manage.py schemamigration wall --initial

Puis-je migrer:

$ py manage.py migrate wall

Vous savez quoi? Il me donne cette BS:

_mysql_exceptions.OperationalError: (1050, "Table 'wall_content' already exists")

Désolé, c'est vraiment de la pisse. Quelqu'un peut-il aider ? merci.

Comment puis-je obtenir du Sud de travailler et de se synchroniser correctement avec tout? La seule chose que je peux penser à est de supprimer mon application de INSTALLED_APPS, puis exécutez syncdb, puis ajouter sur le dos.

C'est TELLEMENT RIDICULE.

175voto

Ken Cochrane Points 12318

Sud vous permet de créer des migrations, lorsque vous commencez à sortir avec une nouvelle application et les tables n'ont pas été ajoutées à la base de données, ainsi que la création de migrations pour les applications existantes qui ont déjà des tables dans la base de données. La clé est de savoir quand le faire.

Votre première erreur a été lorsque vous avez supprimé de votre migrations, dès que vous l'avez fait, et puis a couru syncdb, Django ne savais pas que tu voulais sud pour gérer l'application en plus, donc il a créé les tables pour vous. Lorsque vous avez créé votre première migrations et puis a couru migrer du sud, a été d'essayer de créer des tableaux que django déjà créé, et par conséquent votre erreur.

À ce stade, vous avez deux options.

  1. Supprimer les tables pour le mur d'application à partir de votre base de données, puis exécutez $ py manage.py migrate wall Ce sera exécuter la migration et de créer vos tables.

  2. Faux la migration initiale exécuter $ py manage.py migrate wall 0001 --fake Cela indiquera au sud que vous avez déjà les tables de la base de données donc tout simplement faux, ce qui va ajouter une ligne à la south_migrationhistory table, de sorte que la prochaine fois que vous exécutez un de migrer il sait que la première migration a déjà été exécuté.

La configuration d'un nouveau projet et de bases de données

  1. créer votre base de données
  2. ajouter au sud vers les applications
  3. exécuter syncdb, cela va ajouter le django et le sud des tables de la base de données
  4. ajouter vos applications
  5. pour chaque application exécutez python manage.py schemamigration app_name --initial cela va créer de la migration initiale des fichiers de votre application
  6. ensuite, exécutez le sud migrer python manage.py migrate app_name cela va ajouter les tables de la base de données.

La configuration d'un projet de l'héritage et de la base de données

  1. ajouter au sud vers les applications
  2. exécuter syncdb, ce sera ajouter du sud tables de la base de données
  3. pour chacune de vos applications s'exécutent python manage.py schemamigration app_name --initial Cela permettra de créer votre premier migrations
  4. pour chacune de vos applications s'exécutent python manage.py migrate app_name 0001 --fake , ce sera faux dans le sud, il ne fait rien pour la base de données pour ces modèles, il suffit d'ajouter des enregistrements à la south_migrationhistory table de sorte que la prochaine fois que vous voulez créer une migration, vous êtes tous ensemble.

La configuration d'un projet de l'héritage et de bases de données

  1. créer une base de données
  2. ajouter au sud vers les applications
  3. pour chacune de vos applications s'exécutent python manage.py schemamigration app_name --initial Cela permettra de créer votre premier migrations
  4. exécuter syncdb, cela va ajouter toutes les applications qui n'ont pas les migrations vers la base de données.
  5. ensuite, exécutez le sud migrer python manage.py migrate cela permettra d'exécuter toutes les migrations pour vos applications.

Maintenant que vous êtes de configuration avec le sud, vous pouvez commencer à utiliser le sud pour gérer les changements de modèle pour ces applications. La plus commune de la commande à exécuter est - python manage.py schemamigration app_name migration_name --auto qui va ressembler à la dernière migration vous avez exécuté et il va trouver les changements et construire un fichier de migration pour vous. Ensuite, vous avez juste besoin d'exécuter python manage.py migrate et de modifier votre base de données pour vous.

Espérons que cela aide.

10voto

CppLearner Points 3982

8voto

Andrew Points 2852

Le tutoriel que vous êtes en utilisant états:

(Si cela ne parvient pas à se plaindre de south_migrationhistory n'existe pas, vous avez oublié d'exécuter syncdb après vous installé Sud.)

En supposant que votre post avec précision les détails les étapes que vous avez prises, suivant ce lien semble montrer que vous avez raté une étape avant la mise en place de votre nouvelle application. Comme vous suivez un tutoriel pour la configuration de migrations sur une nouvelle application, la commande est:

  1. Ajouter au sud d' INSTALLED_APPS.
  2. Exécutez syncdb.
  3. Alors suivez le tutoriel.

I. e., vous devriez ai déjà couru syncdb avant de vous ajouter dans les modèles de votre nouvelle application. Votre solution de la suppression de votre application à partir de l' INSTALLED_APPS devrait fonctionner, mais il est intéressant de noter que c'est seulement un "idiot", comme vous l'avez manqué une étape antérieure. A syncdb été exécuté avant la création de modèles pour l'application, vous n'auriez pas à utiliser la solution de contournement.

3voto

Sevenearths Points 1274

Juste pour futur ref. Si le sud est de vous donner des problèmes :

  1. Supprimer les répertoires de migrations de vos répertoires app
  2. Supprimer _migrations Sudde votre base de données
  3. Exécuter manage.py syncdb
  4. Retour à utiliser vers le Sud (par exemple './manage.py convert_to_south quelque chose,./manage.py migrer... ")

1voto

Ashley Davis Points 3016

Cela semble évident, mais je recommande fortement la lecture de la documentation.

Même après avoir lu les réponses à cette question, j'ai eu du mal à comprendre comment utiliser le Sud efficacement.

Tout cela a changé le cours de la journée, j'ai lu les docs et vous devriez aussi, le Sud est plus simple à utiliser que vous ne le pensez.

http://south.aeracode.org/docs/about.html

http://south.aeracode.org/docs/tutorial/index.html

http://south.aeracode.org/docs/convertinganapp.html#converting-an-app

J'ai également trouvé ce utile:

http://www.djangopro.com/2011/01/django-database-migration-tool-south-explained/

Et assurez-vous de lire Jeff Atwood le Codage de l'Horreur d'articles sur la base de données de contrôle de version.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X