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