Ebben az írásban egy módszert fogunk bemutatni, amely lehetővé teszi adatbázisunk modelljének gyors és könnyű fejlesztését, valamint gyors és biztonságos újratervezését. Ehhez a Django webes keretrendszerbe beépített ORM-et fogjuk használni. Tudását kiegészítve és bővítve a South adatbázis migrációkkal.
Először tisztázzuk az eszközválasztást. A Django, a híres jazz gitárosról elnevezett Python nyelven implementált webes keretrendszer egy részét, a Django ORM rendszerét fogjuk használni. A bemutatott példa mégsem elsődlegesen webes megjelenésre tervezzük. Miután adatbázisunkat megterveztük vagy átterveztük, nyugodtan kivehetjük a Django keretrendszer alól. A Django webes keretrendszer egyik nagy előnye, hogy nagyon moduláris. Minden szolgáltatását külön-külön ki- és beemelhetjük. Ez nagy szabadságot ad a keretrendszer felhasználójának és lehetőséget biztosít nagyfokú újrahasznosított kódok, alkalmazások gyártására.
A South
A South, egy a Django ORM-hez csatlakozó alkalmazás. Célja és funkciója, hogy az adatbázis modellek módosítási folyamatába egy újabb lépcsőt iktat. A migrációkat. Ezt az eljárás, a nagy testvérnek minősülő Ruby nyelven implementált Rails keretrendszerből származik. A Railsnél ez a folyamat csak nagy nehezen kapcsolható ki. De kiiktatása, mint ahogy látni fogjuk, nem érdemes.
Miért van szükségünk migrációkra?
Előbb azt mondtuk, hogy egy új lépést vezet be a fejlesztésbe. Ezt most pontosítjuk. Nem csak egy lépést, hanem egy nagyon fontos, a fejlesztési folyamat számára nagyon lényeges plusz lépésről beszélhetünk. Minden egyes módosításáról először egy migrációt készítünk. Az elkészített migráció alapján pedig elvégezhetjük a modell és az adatbázis módosítását. - Ezzel a lépéssel nem csak arra nyílik lehetőségünk, hogy nyomon követhessünk a modellünk és az adatbázisunk fejlődősét. Ha csupán erre lenne lehetőségünk, akkor tekinthetnénk egyszerű adatbázis-verziókövetésnek. Ennél többről van szó. Ezt fogjuk kihangsúlyozni a példánkban is, ahol kifejezetten az adatmigrációkkal foglalkozunk, amely képes a jelenlegi adatokat átalakítani az új modellnek megfelelően. Illetve, képes ezeket a módosításokat vissza is fordítani, ha mégsem lennénk megelégedve az eredménnyel.
A példa alkalmazás
A példa alkalmazásunk modellje csupán egyetlen egy osztályt fog ismerni. Az Account-ot (felhasználó). Egyetlen mezője lesz: a fullname (teljes név). Ezt a nagyon kezdetleges modellünket fogjuk átalakítani úgy, hogy megkülönböztethessük a kereszt- és vezetékneveket. A kereszt- és vezetéknévből pedig mi magunk állíthatjuk elő majd a teljes nevet.
Összegzés és előnyök
A migráció és a Django ORM-jének bemutatása mellett egy újabb előnyre szeretnénk felhívni a figyelmet és érvelni az ORM-ek használata mellett. Az adatbázisokat soha nem önmagukban használjuk. Ha az adatokat módosítani akarjuk, akkor sem egyből az adatbázisban végezzük el a műveleteket. Sokkal kényelmesebb és biztonságosabb, ha egy külső programot használunk erre a műveletre. Egy külső program megvéd bennünket önmagunktól. Megvéd attól, hogy figyelmetlenségből, ismétlődő feladatok rutinjának monotóniájából hibákat kövessünk el. A külső program pedig sokkal több ellenőrzést és informatívabb visszajelzéseket tud adni számunkra, amikor módosítást szeretnénk eszközölni az adatbázisunkban. - Nem utolsó sorban egy külső program képes a kimenet megváltoztatására, így lehetőségünk van eredményeinket másol által emészthető formában ölteni.
Először tisztázzuk az eszközválasztást. A Django, a híres jazz gitárosról elnevezett Python nyelven implementált webes keretrendszer egy részét, a Django ORM rendszerét fogjuk használni. A bemutatott példa mégsem elsődlegesen webes megjelenésre tervezzük. Miután adatbázisunkat megterveztük vagy átterveztük, nyugodtan kivehetjük a Django keretrendszer alól. A Django webes keretrendszer egyik nagy előnye, hogy nagyon moduláris. Minden szolgáltatását külön-külön ki- és beemelhetjük. Ez nagy szabadságot ad a keretrendszer felhasználójának és lehetőséget biztosít nagyfokú újrahasznosított kódok, alkalmazások gyártására.
A South
A South, egy a Django ORM-hez csatlakozó alkalmazás. Célja és funkciója, hogy az adatbázis modellek módosítási folyamatába egy újabb lépcsőt iktat. A migrációkat. Ezt az eljárás, a nagy testvérnek minősülő Ruby nyelven implementált Rails keretrendszerből származik. A Railsnél ez a folyamat csak nagy nehezen kapcsolható ki. De kiiktatása, mint ahogy látni fogjuk, nem érdemes.
Miért van szükségünk migrációkra?
Előbb azt mondtuk, hogy egy új lépést vezet be a fejlesztésbe. Ezt most pontosítjuk. Nem csak egy lépést, hanem egy nagyon fontos, a fejlesztési folyamat számára nagyon lényeges plusz lépésről beszélhetünk. Minden egyes módosításáról először egy migrációt készítünk. Az elkészített migráció alapján pedig elvégezhetjük a modell és az adatbázis módosítását. - Ezzel a lépéssel nem csak arra nyílik lehetőségünk, hogy nyomon követhessünk a modellünk és az adatbázisunk fejlődősét. Ha csupán erre lenne lehetőségünk, akkor tekinthetnénk egyszerű adatbázis-verziókövetésnek. Ennél többről van szó. Ezt fogjuk kihangsúlyozni a példánkban is, ahol kifejezetten az adatmigrációkkal foglalkozunk, amely képes a jelenlegi adatokat átalakítani az új modellnek megfelelően. Illetve, képes ezeket a módosításokat vissza is fordítani, ha mégsem lennénk megelégedve az eredménnyel.
A példa alkalmazás
A példa alkalmazásunk modellje csupán egyetlen egy osztályt fog ismerni. Az Account-ot (felhasználó). Egyetlen mezője lesz: a fullname (teljes név). Ezt a nagyon kezdetleges modellünket fogjuk átalakítani úgy, hogy megkülönböztethessük a kereszt- és vezetékneveket. A kereszt- és vezetéknévből pedig mi magunk állíthatjuk elő majd a teljes nevet.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## Szükséges csomagok telepítése | |
pip install django south | |
## Telepítés után Django Projekt létrehozása | |
django-admin startproject SimpleDBAndMigrate | |
# Belépés a projekt könyvtárába | |
cd SimpleDBAndMigrate | |
# Az app létrehozása | |
django-admin startapp simple | |
# Választott szerkesztővel megnyitjuk alkalmazásNeve/settings.py -t | |
emacs ./simple/settings.py | |
# 1) Database dictionary-ban módosítjuk az adatbázis kapcsolatot. | |
# A példában én sqlite3-at használtok. Megadok a nevét is! | |
DATABASES = { | |
'default': { | |
'ENGINE': 'django.db.backends.sqlite3', | |
'NAME': 'test.sqlite', | |
'USER': '', | |
'PASSWORD': '', | |
'HOST': '', | |
'PORT': '', | |
} | |
} | |
# 2) Installáljuk a saját és a külső programokat | |
INSTALLED_APPS = ( | |
'django.contrib.auth', | |
'django.contrib.contenttypes', | |
'django.contrib.sessions', | |
'django.contrib.sites', | |
'django.contrib.messages', | |
'django.contrib.staticfiles', | |
# migraciokert felelo South modul | |
'south', | |
# saját alkalmazásunk: projektNeve.alkalmazásNév alakban | |
'SimpleDBAndMigrate.simple', | |
# admin felület létrehozása, később mindenképp haszos! | |
'django.contrib.admin' | |
) | |
## A projektünk mappájában állva létrehozzuk az adatbáziskapcsolatot, | |
# szinkronizáljuk az adatbázissal. | |
./manage.py syncdb # Ha nem üzemelne, akkor chmod +x ./manage.py-al adjunk jogosultságokat! | |
## Itt meg fogja kérdezni tőlünk az admin nevét és jelszavát. | |
# Állítsuk be. Ha később elfelejtetnénk, akkora ./manage.py createsuperuser | |
# paranccsal újra megadhatjuk. | |
### Ez volt az első és utolsó alkalom, amikor migrációk nélkül | |
# szinkronizáljuk az adatbázisunkat. | |
## Kezdetleges modell létrehozása a ./simple/model.py -ba | |
class Account(models.Model): | |
fullname = models.CharField(max_length=100, null=False) | |
## A modellünk most csak egy Account táblája van, | |
# aminek egy mezője van, a fullname. | |
# Ez a fullname 100 karakterhosszú és nem lehet nulla. | |
## Első migráció ./manage.py schemamigration alkalmazasNevve --inti | |
./manage.py schemamigration simple --init | |
## Ha lefutott, akkor végezzük is el az adatbázis módosításokat | |
./manage.py migrate simple | |
## Most módosítsuk a modellt (./simple/model.py) | |
# Adjunk hozzá két mezőt, a first_name-et és a last_name-et. | |
# Ebből a két adatból fogjuk létrehozni a fullname mező tartalmát. | |
class Account(models.Model): | |
fullname = models.CharField(max_length=100, null=False) | |
first_name = models.CharField(max_length=100, null=False) | |
last_name = models.CharField(max_length=100, null=False) | |
## Adatmigráció | |
./manage.py datamigration simple fullname | |
## Ezzel a lépéssel létrehozzuk az adatmigrációs fájlt. | |
# Nyissuk meg és módosítsuk a forwards és backwards függvények tartalmát. | |
# Ezek a függvények dolgozzák át a jelenlegi modellünk tartalmát az új modellünkre | |
# illeszkedő tartalommá. A forward az új modellhez igazít, | |
# a backwards pedig a visszatérést a régi modellhez segíti elő. | |
def forwards(self, orm): | |
"Adatok atalakitasa az uj modell szerint" | |
for user in orm.Account.objects.all(): | |
user.first_name, user.last_name = user.fullname.split(' ') # erdemes kicserelni regexp-re! | |
user.save() | |
def backwards(self, orm): | |
"Adatok helyreallitasa a regi modell szerint" | |
for user in orm.Account.objects.all(): | |
user.fullname = user.first_name + " " + user.last_name | |
user.save() | |
Összegzés és előnyök
A migráció és a Django ORM-jének bemutatása mellett egy újabb előnyre szeretnénk felhívni a figyelmet és érvelni az ORM-ek használata mellett. Az adatbázisokat soha nem önmagukban használjuk. Ha az adatokat módosítani akarjuk, akkor sem egyből az adatbázisban végezzük el a műveleteket. Sokkal kényelmesebb és biztonságosabb, ha egy külső programot használunk erre a műveletre. Egy külső program megvéd bennünket önmagunktól. Megvéd attól, hogy figyelmetlenségből, ismétlődő feladatok rutinjának monotóniájából hibákat kövessünk el. A külső program pedig sokkal több ellenőrzést és informatívabb visszajelzéseket tud adni számunkra, amikor módosítást szeretnénk eszközölni az adatbázisunkban. - Nem utolsó sorban egy külső program képes a kimenet megváltoztatására, így lehetőségünk van eredményeinket másol által emészthető formában ölteni.
Nincsenek megjegyzések:
Megjegyzés küldése