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.
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',
}
}
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',
}
}
Poniższa komenda pozwala na migrację struktury bazy danych z obecnej bazy SQLite do nowej bazy MySQL
python manage.py migrate --database=new
Dane eksportujemy za pomocą poniższej komendy do pliku data.json:
python manage.py dumpdata>data.json
Import danych z pliku data.json do bazy oznaczonej jako "new":
python manage.py loaddata data.json --database=new
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',
}
}
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ółpracaMoje certyfikaty