Pourquoi ne pas mon sud, les migrations de travail?
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 à 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
Grand, 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 tableau, 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 pisser me off. 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.
- Ken réponse est fondamentalement correct autant que des solutions d'y aller, mais juste pour signaler ce qui s'est passé afin que vous pouvez apprendre de lui: la suppression de votre migrations dir était le problème la deuxième fois. À partir d'un nettoyage de base de données: 1. créez votre migrations pour n'importe quelle des apps les utiliser, 2. exécuter syncdb, 3. exécutez le migrer de commande. Qui va utiliser syncdb pour créer unmigrated tables, et sud pour créer migré ceux. Un dernier point: lorsque le syncdb sortie dit "Non synchronisée (utiliser les migrations):" assurez-vous de lire ce qui vient après. Il n'y avait rien à migrer dans votre sortie parce que vous n'aviez pas de migrations.
- +1 pour la fourniture d'une analyse approfondie de votre problème
- Si vous traitez avec des classes dans plusieurs fichiers, vérifiez si vous avez app_label dans tous!
Vous devez vous connecter pour publier un commentaire.
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.
Supprimer les tables pour le mur d'application à partir de votre base de données, puis exécutez
$ py manage.py migrate wall
Cela va lancer la migration et de créer vos tables.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
python manage.py schemamigration app_name --initial
cela va créer de la migration initiale des fichiers de votre applicationpython 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
python manage.py schemamigration app_name --initial
Cela permettra de créer votre premier migrationspython 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
python manage.py schemamigration app_name --initial
Cela permettra de créer votre premier migrationspython 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écuterpython manage.py migrate
et de modifier votre base de données pour vous.Espère que ça aide.
C'est la façon dont je les choses de travail.
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/
Le tutoriel que vous êtes en utilisant états:
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:
INSTALLED_APPS
.syncdb
.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 deINSTALLED_APPS
devrait fonctionner, mais il est intéressant de noter que c'est seulement un "idiot" de travail-tour, car vous avez manqué une étape précédente. Asyncdb
été exécuté avant la création de modèles pour l'application, vous n'auriez pas à utiliser le travail autour de.Seulement pour l'avenir, réf. Si le Sud est de vous donner tous les problèmes:
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.
Que tout a changé bien sûr, 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.
J'ai utilisé que le fixer avec le Sud des problèmes dans le passé. Pas une jolie solution mais très efficace 😉
Mais le principal problème, c'est que votre commande n'est pas correcte. Vous devriez avoir exécuté syncdb avant le tutoriel. Qu'il fonctionne correctement.