Otin eräässä Django-projektissani vihdoin käyttöön Southin, joka hoitaa tietokannan schema-päivitykset automaattisesti. Käyttöönotossa oli hieman opiskeltavaa, mutta nyt en aio enää toteuttaa yhtäkään projektia ilman Southia.
Kehitysvaiheessa South hoitaa automaattisesti tarvittavien kenttien lisäämiset ja muutokset tietokantaan. Koodaajan tarvitsee vain muokata Djangon model-luokkiaan tavalliseen tapaan ja ajaa sitten komennot:
./manage.py schemamigration --auto <appname>
./manage.py migrate <appname>
Ei siis enää manuaalisia ALTER TABLE -komentoja ja oikeiden datatyyppien arvailemisia! Tämä helpottaa jatkuvaa kehitystä todella paljon.
South tallentaa tietokantamigraatiot myös migrations/*.py-tiedostoihin, jotka tulevat luonnostaan osaksi projektia versiohallinnassa. Nämä mahdollistavat migraatioiden ajamisen kaikille kehitys-, testi- ja tuotantopalvelimille, joissa sovellusta ajetaan. South pysyy ajan tasalla tämänhetkisestä tietokannan versiosta omalla south_migrationhistory-taulullaan, josta näkyy, mikä migraatio on ajettu tietokantaan viimeksi.
Southin käyttöönotto olemassaolevaan Django-projektiin on helppoa. Ensin se vain asennetaan normaalina Python-pakettina:
sudo pip install south
Sitten se otetaan käyttöön halutu(i)ssa Django-sovelluksissa ajamalla komento:
./manage.py convert_to_south <appname>
Sudenkuoppana South hämääntyy joskus tilanteista, joissa esimerkiksi lisätään "field_id"-niminen kenttä ja poistetaan samalla "field"-kenttä, joka oli oikeasti ForeignKey ja siksi myös nimellä "field_id" tietokannassa. Vastaavia yhdistelmiä tulee aina toisinaan vastaan.
Mikäli migraatiot saa kehitysvaiheessa aivan sekaisin, voi aina tyhjentää south_migrationhistory-taulun ja poistaa migrations-hakemiston, korjata asiat tietokantaan käsin sekä ajaa ./manage.py convert_to_south -komennon uudelleen. Tuotantovaiheessa on tietysti oltava vähän tarkempana.