El Blog de Trespams

Blog personal sobre tecnologia, gestió de projectes i coses que se me passen pel cap

Receptes de South

Pels aquelles que encara no el coneixeu, permeteu-me que us presenti south una eina per a controlar els canvis que es van fent al model i poder-los aplicar a la nostra base de dades.

South és una eina fantàstica, però no substitueix ni la necessitat de fer còpies de seguretat abans de fer algun canvi que pugui significar la destrucció o alteració de dades, ni la necessària coordinació entre els diferents membres de l'equip de desenvolupament.

Al tutorial des south està molt bén explicat tot, així que aquest apunt miraré de posar les receptes que he trobat més interessants, bàsicament per a no oblidar-me'n.

Canvi de nom d'un camp

South intentarà esborrar el camp i crear-ne un de nou. No sap que el que volíeu era un canvi de nom així que:

  1. Fem la migració de la manera habitual python manage.py schemamigration app --auto

South generarà una nova migració. Amb el vostre editor preferit, editau-la i eleminau les referències a l'eliminació i creació del camp. En el seu lloc, utilitzau directament l'API de South, per escriure

db.rename_column(table_name, column_name, new_column_name)

amb les columnes en sentit contrari per desfer la migració, obviament...

Hem modificat un camp a la BD directament

Les primeres vegades que es fa servir South costa que tot l'equip s'hi acostumi. Si la gent estava acostuamada a passar scripts sql, potser els ha passat i no ha fet ús de la migració.

South detectarà que la migració no està passada i intentarà passar-la, però com que els canvis ja hi són (la taula que es vol crear ja existeix, o el camp, ...), South donarà un error i intentarà tirar la migració enrera. En el cas de Postgres no hi haurà problemes, però amb bases de dades com el MySQL que no suporten la transaccionalitat d'esquemes donarà error.

No passa res si detectau que és això el que ha passat. Però hem de dir-li a South que consideri que la migració ja està feta. Per axixò farem:

python manage.py migrate app --fake

suposant que és la darrera migracío, o bé especificant quina migració s'ha de considerar aplicacada.

python mangae.py migrate app num_migració --fake

Ja tenim la base de dades i volem començar a fer feina amb South

Per a convertir una aplicació de la qual ja teniu la base de dades creada hem de fer

python manage.py convert_to_south app

això posarà l'aplicació sota el control de south, crearà la migració inicial i la marcarà com a aplicada.

blog comments powered by Disqus