Qual è il modo migliore per eseguire la migrazione di un Django DB SQLite a MySQL?

Ho bisogno di migrare il mio db da sqlite a mysql, e i vari strumenti/script ci sono troppe per me, per individuare facilmente il più sicuro e più elegante soluzione.

Questa mi è sembrata bella http://djangosnippets.org/snippets/14/, ma sembra essere di 3 anni dal momento che ottenere un aggiornamento che è preoccupante..

Potete consigliarmi una soluzione che è noto per essere affidabile con Django 1.1.1 ?

  • Immagino che abbiate già provato un dumpdata seguita da un loaddata?
InformationsquelleAutor GJ. | 2010-06-14

 

4 Replies
  1. 73

    Eseguire:

    python manage.py dumpdata > datadump.json

    Avanti, cambiare i settings.py per il database mysql.

    Infine:

    python manage.py loaddata datadump.json
    • Tranne a volte questo non funziona, se hai messo i dati unicode in stringhe sql, l’attrezzatura creatore di mysql e non sembrano andare d’accordo. Almeno, questo è quello che sono venuto qui a cercare di capire come risolvere.
    • O questo non funziona a causa di errori di integrità…o molte altre questioni.
    • A volte si alza “… non è JSON serializzabile”
    • A volte si esaurisce la memoria stackoverflow.com/a/23047947/1061572
    • Tipo python manage.py migrate prima loaddata.
    • In esecuzione dumpdata > datadump.json genera l’errore: CommandError: No installed app with label '>'.

  2. 43

    Dopo un po ‘ duro di ricerca ho avuto diversi problemi che mi auguro in futuro di rispondere alla ricerca di persone troveranno utile.

    la mia formula è

    1. python manage.py dumpdata > datadump.json
    2. Cambiare settings.py per mysql
    3. Assicurarsi che è possibile connettersi a mysql (autorizzazioni,ecc)
    4. python manage.py migrate --run-syncdb
    5. Escludere contentype dati con questo frammento di codice nella shell

      python manage.py shell

      from django.contrib.contenttypes.models import ContentType
      ContentType.objects.all().delete()
      quit()

    6. python manage.py loaddata datadump.json

    Speranza che vi aiuterà!

    • che funziona per me. cumuli grazie
    • Che cosa fa il contenttype dati di esclusione fare?
    • La risposta canonica è questo. Ma la risposta migliore che ho trovato è: questo
    • Che ha lavorato per me troppo. Passo 5 era necessario per la loaddata comando per lavoro.
    • Ricevo questa risposta django.db.modelli.campi.related_descriptors.RelatedObjectDoesNotExist: Problema di installazione di apparecchio di ‘/home/ubuntu/news-manifesto-master/datadump.json’: Commento non ha content_type.
  3. 1

    Questo è un modo più accurato per evitare il ContentType problemi descritti altrove:

    ./manage.py dumpdata --exclude contenttypes --exclude auth.permission --exclude sessions --indent 2 > dump.json

    Quindi:

    ./manage.py loaddata dump.json
  4. 0

    Un (fuller) elenco delle operazioni necessarie per lo spostamento da sqlite a MySQL, YMMV:

    1. python manage.py dumpdata > datadump.json
    2. Assicurarsi che è possibile connettersi a mysql (autorizzazioni, ecc)
    3. Assicurarsi di AVERE i PRIVILEGI per modificare FOREIGN_KEY_CHECKS (ho dovuto installare ed eseguire il mio privata istanza di mysql) e di
    4. Assicurarsi motore InnoDB NON è utilizzato (uso MyISAM in ogni tabella) o il prossimo passo non funziona (non presidiata)!
    5. Relax convalida da parte di questo comando (questo non avrà effetto in InnoDB):
      SET GLOBAL FOREIGN_KEY_CHECKS = 0;
    6. Carico django_site.tabella sql separatamente (in caso di utilizzo contrib.siti)
    7. Cambiare settings.py per il nuovo mysql
    8. python manage.py la migrazione –run-syncdb
    9. Fix syncdb errori errori da armeggiare con il codice in /migrazioni directory Django apps e le tabelle di DB come necessario
    10. Escludere contentype dati con questo pezzo (può mettere nella principale urls.py modulo):
      from django.contrib.contenttypes.models import ContentType
      ContentType.objects.all().delete()
      quit()
    11. Se necessario, la modifica di dati in formato json sono per abbellire prima:
      cat datadump.json | python -m json.tool > datadump_pretty.json
    12. python manage.py loaddata datadump.json
    13. La correzione di eventuali dati troncamento problemi
    14. Aggiungere timezone dati al database:
      mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -D mysql -P 1234 -u root -p --protocol=tcp
      mysql -P 1234 -u root -p -e "flush tables" --protocol=tcp
    15. Testare il sito funziona senza la presentazione di eventuali dati
    16. SET GLOBAL FOREIGN_KEY_CHECKS = 1;
    17. Di testare il resto

Lascia un commento