Django. Zmiana bazy danych wraz z transferem danych

11.2022 | django | Zmiana bazy danych | Migrate

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',
}
}

O Mnie

Wspieram firmy w transformacji na model działania oparty o dane. Wdrażam i wyciągam rekomendacje, płynące z danych.

Korzystam z Google Marketing Cloud, Google Cloud Platform, Tableau, Microsoft Power BI oraz Python i R.

Posiadam certyfikat Google Analytics 4 i Tableau Certified Professional, doświadczenie akademickie oraz 20-lat doświadczenia biznesowego.

Jestem Co-Founderem spółek: Hexe Capital SA, Cut2Code, Boostsite, KODA, Insightland.

Zapraszam. Krzysztof Surowiecki

Więcej o mnie Współpraca

Moje certyfikaty