Pourquoi mes migrations Sud ne marchent pas?

tout d'abord, je crée ma base de données.

create database mydb;

j'ajoute" Sud " aux applications installées. Ensuite, je vais à 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 migre.

$ py manage.py migrate wall

mais ça 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ù mes 870 questions posées sur Stackoverflow), et je reçois cette page: http://groups.google.com/group/south-users/browse_thread/thread/d4c83f821dd2ca1c

D'accord, donc je suis les instructions

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

mais quand j'exécute syncdb, Django crée un tas de tables. Oui, il crée la table south_migrationhistory, mais il crée aussi les tables de mon application.

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.

très bien, très bien. J'ajouterai wall aux migrations initiales.

$ py manage.py schemamigration wall --initial

puis je migre:

$ py manage.py migrate wall

Tu sais quoi? Il me donne CE BS:

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

Désolé, ça me fait vraiment chier. Quelqu'un peut-il aider ? grâce.

Comment puis-je obtenir du Sud de travailler et de synchronisation correctement avec tout? La seule chose à laquelle je pense est de supprimer mon application de INSTALLED_APPS, puis d'exécuter syncdb, puis de l'ajouter à nouveau.

C'est idiot.

78
demandé sur notbad.jpeg 2011-01-30 02:23:13
la source

6 ответов

South vous permet de créer des migrations lorsque vous démarrez avec une nouvelle application et que les tables n'ont pas encore été ajoutées à la base de données, ainsi que de créer des 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é vos migrations, dès que vous avez fait cela, et puis lancé syncdb, Django ne savait pas que vous vouliez que le sud gère cette application plus, donc il a créé le des tables pour toi. Quand vous avez créé vos migrations initiales et ensuite ran migrate, south essayait de créer des tables que django avait déjà créées, et donc votre erreur.

à ce point vous avez deux options.

  1. supprimez les tables pour l'application murale de votre base de données, puis lancez $ py manage.py migrate wall cela lancera la migration et créera vos tables.

  2. truquer l'initiale la migration exécuter $ py manage.py migrate wall 0001 --fake cela indiquera au sud que vous avez déjà les tables sur la base de données alors faites semblant, ce qui ajoutera une ligne à la table south_migrationhistory, de sorte que la prochaine fois que vous exécutez un migrate il saura que la première migration a déjà été effectuée.

création d'un nouveau projet et de bases de données

  1. créer votre base de données
  2. ajouter le Sud aux applications installées
  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, lancez python manage.py schemamigration app_name --initial cela créera les fichiers de migration initiale pour votre application
  6. puis exécuter South migrate python manage.py migrate app_name cela ajoutera les tables à la base de données.

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

  1. ajouter du Sud à applications installées
  2. exécuter syncdb, ce sera ajouter du sud tables de la base de données
  3. pour chacune de vos applications, exécutez python manage.py schemamigration app_name --initial cela créera vos migrations initiales
  4. pour chacun de vos applis lancer python manage.py migrate app_name 0001 --fake , cela va simuler le sud, il ne fera rien à la base de données pour ces modèles, il va juste ajouter des enregistrements à la table south_migrationhistory de sorte que la prochaine fois que vous voulez créer une migration, vous êtes tous définir.

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, exécutez python manage.py schemamigration app_name --initial cela créera vos migrations initiales
  4. lancer syncdb, cela ajoutera toutes les applications qui n'ont pas de migration vers la base de données.
  5. puis courir vers le sud migrer python manage.py migrate ce sera exécuter toutes les migrations pour vos applications.

maintenant que vous êtes configuré avec south, vous pouvez commencer à utiliser south pour gérer les modifications de modèle de ces applications. La commande la plus courante à exécuter est python manage.py schemamigration app_name migration_name --auto qui examinera la dernière migration que vous avez effectuée et qui trouvera les modifications et construira 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ère que ça aide.

174
répondu Ken Cochrane 2011-10-17 18:05:44
la source

C'est comme ça que je fais marcher les choses.

pip install South

# add 'south', to INSTALL_APPS, then
python manage.py syncdb

# For existing project + database
python manage.py convert_to_south app_name

# Thereafter, call them per model changes
python manage.py schemamigration app_name --auto
python manage.py migrate app_name

, les Références:

http://garmoncheg.blogspot.com/2011/08/django-how-and-why-to-use-migrations.html http://www.djangopro.com/2011/01/django-database-migration-tool-south-explained /

10
répondu CppLearner 2012-01-03 23:05:26
la source

le tutoriel que vous utilisez déclare:

(si cela échoue se plaindre que south_migrationhistory n'existe pas, vous avez oublié d'exécuter syncdb après vous installer Sud .)

en supposant que votre message détaille précisément les étapes que vous avez prises, en suivant ce lien semble montrer que vous avez manqué une étape avant de configurer votre nouvelle application. Comme vous suivez un tutoriel pour configurer migrations sur une nouvelle application, l'ordre est:

  1. ajouter Sud à INSTALLED_APPS .
  2. Exécuter syncdb .
  3. puis suivez le tutoriel.

I. E., vous auriez dû lancer syncdb avant d'ajouter les modèles pour votre nouvelle application. Votre solution de supprimer votre application de 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. Si syncdb avait été lancé avant que vous ayez créé les modèles pour cette application, vous n'auriez pas à utiliser la solution de rechange.

8
répondu Andrew 2011-01-30 02:55:37
la source

Seulement pour l'avenir, réf. Si le Sud vous pose des problèmes:

  1. supprimer le migrations répertoires à partir de vos répertoires app
  2. Supprimer Sud _migrations de votre base de données
  3. Run manage.py syncdb
  4. retourner à utiliser le sud (par exemple". /manage.py convert_to_south quelque chose,. /manage.py migrer. ..')
3
répondu Sevenearths 2013-10-25 17:50:23
la source

cela semble évident, mais je recommande vivement la lecture des docs.

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

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 aussi trouvé cela utile:

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

et assurez-vous de lire les articles D'horreur de codage de Jeff Atwood sur le contrôle de version de base de données.

1
répondu Ashley Davis 2012-03-16 02:45:08
la source

Comment puis-je obtenir du Sud de travailler et de synchronisation correctement avec tout? La seule ce que je peux penser est d'enlever mon application à partir de INSTALLED_APPS, puis lancez syncdb, ajouter ensuite sur.

j'ai utilisé ce correctif avec les troubles du Sud dans le passé. Pas une jolie solution mais très efficace ;)

Mais le problème principal est que votre commande n'est pas correcte. Vous auriez dû lancer syncdb avant le tutoriel. Que cela fonctionne correctement.

0
répondu Wolph 2011-01-30 02:58:14
la source

Autres questions sur