Porady. Pandas. Python. Django. Microsoft Power BI. Tableau.

Django. Zmiana bazy danych wraz z transferem danych

11.2022 | inne | django | zmiana bazy danych

Jedną z licznych zalet Django jest możliwość szybkiej i prostej zmiany bazy danych. Przykładowo taka możliwość jest przydatna, w sytuacji, gdy budujemy stronę i w pierwszym jej okresie, wykorzystujemy SQLite jako podstawową bazę danych.

SQLite ma niewątpliwą zaletę, jaką jest prostota, związana zarówno z "implementacją" takiej bazy, jak i jej wykorzystaniem. Gdy jednak ruch w serwisie rośnie, a także wzrasta ilość treści w serwisie, to konieczne staje się przejście na rozwiązania "bardziej profesjonalne" np. bazę MySQL.

W niniejszym artykule przedstawiamy proces migracji z bazy danych SQLite do bazy MySQL w aplikacji opartej o Django.

Krok 1. Stan wyjściowy

Lokalizacja: plik settings.py

W pliku settings.py lokalizujemy następującą sekcję:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}

Krok 2. Dodanie nowej bazy danych

Domyślnie jest w nią baza SQLite oznaczona kluczem "default".

Nową bazę dodajemy np. z kluczem "new".

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
},
'new': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'database-name',
'USER': 'user-name',
'PASSWORD': 'pass',
'HOST': 'myhosting.mysql.pythonanywhere-services.net',
}
}

Krok 3. Migracja struktury bazy danych

Poniższa komenda pozwala na migrację struktury bazy danych z obecnej bazy SQLite do nowej bazy MySQL

python manage.py migrate --database=new

Krok 4. Eksport danych z obecnej bazy do pliku JSON

Dane eksportujemy za pomocą poniższej komendy do pliku data.json:

python manage.py dumpdata>data.json

Krok 5. Import danych do nowej bazy

Import danych z pliku data.json do bazy oznaczonej jako "new":

python manage.py loaddata data.json --database=new

Krok 6. Ustawienie nowej bazy jako domyślnej

Rekomenduję pozostawić przez kilka kolejnych dni starą bazę, jako backup, na wypadek, gdyby jednak nowa baza nie zadziałała zgodnie z naszymi oczekiwaniami i był konieczny roll-back (przywrócenie stanu poprzedniego)

Finalny kod jest następujący:

DATABASES = {
'old': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
},
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'database-name',
'USER': 'user-name',
'PASSWORD': 'pass',
'HOST': 'myhosting.mysql.pythonanywhere-services.net',
}
}

Wdrażam rozwiązania analityczne, buduję raporty zarządcze i pomagam zrozumieć dane.

Korzystam z Google Marketing Cloud, Microsoft Power BI, Google Cloud oraz Python.

Pracowałem m.in. dla Credit Suisse, Phonak, Hansaton, Unitron, Nestle, IBM, Play.

Jestem współtwórcą grupy Hexe Capital SA.

Zapraszam do lektury i współpracy.

Krzysztof Surowiecki

Chcę porozmawiać o współpracy →

Moje certyfikaty