Y a-t-il un moyen de convertir un base de données Myisam à innoDB (dans un manière qui créera toutes les contraintes de clé étrangère, de la même manière que ce serait si je rencontrais la commande Syncdb depuis le début)? P>
4 Réponses :
Cela n'a vraiment rien à voir avec Django. C'est entièrement une chose mysql, et il y a de la documentation sur ce type de chose directement à partir d'eux: http://dev.mysql.com/doc/refman/5.5/fr/converting-tables-a-innodb.html P>
Est ce que c'est vraiment? Je veux dire, les tables de myisam n'ont pas de contraintes de clé étrangère stockées dans leurs définitions. Django d'autre part, contient des informations sur les relations de tables, n'est-ce pas? Peut-être que l'OP est de demander un moyen de convertir les tables tout en ajoutant les FKS (qui correspondent aux relations) définies à Django?
@YPERCUBE - Vous avez raison, je ne sais pas pourquoi Chris pensait qu'il ne convient pas à Django ..
Où dans le commentaire de Chris a-t-il dit qu'il ne convient pas à Django? Il a juste dit que la migration des tables n'a rien à voir avec Django, ce qui est vrai. Suivez ses instructions et si les contraintes FK ne sont pas déjà là, vous pouvez les obtenir avec gérer.py sqlindexes code>.
Je me suis confus quand il a mentionné Django. C'est la question de MySQL, pas Django!
Conversion de Myisam en Innodb avec Django.
Compte tenu de l'ancienne base de données est dans Myisam. P>
Dump Les données de la vieille base de données à JSON avec: P>
$ python manage.py loaddata contenttype.json $ python manage.py loaddata everything_else.json
Vous pouvez tronquer toutes vos tables en utilisant ./Manage.py SQLFLUSH | ./manage.py dbshell
Le Django Docs dit de supprimer le Init_Command lorsque votre table a été créée, car elle ajoute une requête SQL à chaque connexion de base de données. Au lieu de cela, changez le type de tableau par défaut dans votre configuration MySQL.
À qui vient ici pour copier / coller le code: vous avez probablement essayé cela et cela a donné une erreur "1064 (42000) à la ligne 1" code>. C'est parce qu'il y a eu des avertissements initiaux lors de l'exécution
python manage.py sqlflush code>. Pour le contourner:
python manage.py sqlflush> flushdump.txt code>, supprimer les avertissements initiaux, enregistrer, puis
python manage.py dbshell
Ceci pourrait aider:
python manage.py convert_to_innodb
J'ai eu une situation similaire où je n'ai pas réalisé que mon fournisseur d'hébergement avait une telle vieille version MySQL qu'il avait toujours défaut à Myisam, mais j'avais déjà configuré les tables de base Django.
Ceci a été publié environ 2 mois après la question initiale: Convertir le héritage Django MySQL DBS de Myisam à Innodb . P>
La réponse de la Léch / Trey Décrivez la table Alter Table ___ moteur = InnoDb Commande qui convertit la table dans MySQL, mais le problème est que même si les tables sont convertis, ils n'ont pas les contraintes de clé étrangère qui auraient été configurées si les tables avaient été innodub en premier lieu. p>
J'ai trouvé, sur django-admin.py et manage.py , que i Loked D à installé_apps dans Paramètres.py et a fini par exécuter quelque chose comme après avoir convertit toutes les tables en moteur = Innodb, j'ai dirigé les contraintes de clé étrangère ci-dessus et croient que je devrais avoir La base de données dans le même État qu'il aurait été si ma base de données avait fait défaut de créer des tables innovées en premier lieu. P> Incidemment, comme vous avez mentionné Michael Van de Waeter dans sa réponse, si vous voulez de nouvelles tables Django crée d'être innodb par défaut, vous devez ajouter python manage.py sqlall appname code> "Imprime les instructions de création de table et de données de données initiales pour le (s) nom d'application donné." P>
python manage.py sqlall admin AuthentifiantType sessions Sites Sites Messages statiquesFILES CODE> (un pour chaque DJANGO.CONTRIB.AppName dans Installation_Apps). Qui montraient les énoncés initiaux de la table, des index et des contraintes de clé étrangère: p>
'options': {"init_command": "SET STOCKAGE_EGINE = INNODB",} code> vers les bases de données DICT dans Paramètres.py P> P> P> P> P> P> P> P> >