2010-12-28 19 views
7

Mam wdrożenie Django w produkcji, które używa MySQL.Jak przeprowadzić migrację modeli Django z mysql do sqlite (lub między dowolnymi dwoma systemami baz danych)?

Chciałbym robić dalszy rozwój z SQLite, więc chciałbym zaimportować moje istniejące dane do bazy danych SQLite. I

Istnieje skrypt powłoki here do konwersji ogólnego zrzutu MySQL do SQLite, ale nie działał on dla mnie (najwyraźniej ogólny problem nie jest łatwy).

Pomyślałem, że robienie tego przy użyciu modeli Django musi być znacznie łatwiejsze. Jak byś to zrobił? Czy ktokolwiek ma jakiś skrypt do tego?

Odpowiedz

17

korzystanie

manage.py dumpdata > your_file.json 

do eksportu danych z systemu produkcyjnego (docs).

Następnie przenieść plik w systemie rozwoju i uruchomić

manage.py loaddata your_file.json 

Można również umieścić plik w your_app/folder Oprawy o nazwie „initial_data.json”, a zostanie on automatycznie ładowany podczas uruchamiania „zarządzanie .py syncdb "(docs).

2

Czy próbowałeś używać manage.py dumpdata > datadump, a następnie, gdy nowa baza danych jest poprawnie skonfigurowana, użyj python manage.py loaddata datadump?

0

Może dać południe spróbować:

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

+0

południe najlepiej nadaje się do schematu migracja, a nie dane dotyczące importu/eksportu. –

+0

@mosta: funkcje migracji schematu na południu są doskonałe, ale na południu są również dobre możliwości migracji danych. – mkelley33

1

Jeśli masz contenttypes zainstalowaną aplikacją

INSTALLED_APPS = (
    'django.contrib.contenttypes', 
) 

Użyj skryptu jak co do kopiowania Ci wejście do nowej bazy:

from django.contrib.contenttypes.models import ContentType 

    def run(): 

     def do(Table): 
      if Table is not None: 
       table_objects = Table.objects.all() 
       for i in table_objects: 
        i.save(using='slave') 

     ContentType.objects.using('slave').all().delete() 

     for i in ContentType.objects.all(): 
      do(i.model_class()) 

Zobacz pełna instrukcja here

+0

Myślę, że zapomniałeś o czymś wspomnieć. Oto rzeczy, które mi pomogły 1) Upewnij się, że ustawienia są poprawne (tzn. Jeśli żadne typy zawartości go nie dodają). następnie 'python manage.py syncdb - database slave' lub' python manage.py migrate --database slave'. 2) Napisz funkcję 'run()' some where. 3) Wywołaj go z 'python manage.py shell' lub utwórz niestandardowe polecenie django (https://docs.djangoproject.com/en/1.9/howto/custom-management-commands/)*https://docs.djangoproject .com/pl/1.9/howto/custom-management-commands /] i użyj go. –

+0

Wierzę, że będzie działać również z innymi DBS. –

+0

To dość przestarzała odpowiedź. Najnowsze Django mają lepszą wersję 'dumpdata', więc nie musisz tworzyć niestandardowego rozwiązania do przełączania między bazami DB. – inoks

Powiązane problemy