El blog de Trespams

[ x ]

Faig servir les cookies de Google Analytics per al control de visites i estadístiques..
És una pardalada, però la llei diu que us he d'avisar, ja veus. Així que si visitau aquest blog donau-vos per informats o sortiu ara mateix i netejau les cookies del vostre navegador. Si continuau llegint, suposaré que ja us està bé. Si vols saber com llevar les cookies del teu navegador: aquí ho pots trobar

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
  2. 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