Magazine Informatique

South vous aide à faire évoluer votre modèle de donnée sous Django

Publié le 08 janvier 2010 par Luc
Bonjour à tous,

Ce 1er article de l'année est pour moi l'occasion de vous renouveler tous mes vœux de santé, de bonheur et de réussite pour 2010. Pour moi cette année a très bien commencé avec des perspectives intéressantes de projets et de partenariats. Ce début d'année est aussi marqué par la neige et le froid, alors je vous propose de penser un peu à la chaleur du sud grâce à Python. Quel rapport me direz-vous alors lisez la suite.

Tout d'abord, je suis très content d'accueillir un nouveau contributeur sur Modbus Test Kit, le projet open-source que j'ai initié. Il s'appelle Riaan Doorduin et vit en Afrique du Sud. Il utilise modbus-tk pour un vrai projet et pas seulement pour les tests. Il m'a proposé un fix intéressant pour booster la communication série. Nous sommes en train de tester le résultat et le fix sera inclus dans la version 0.3.2 qui sera prête j'espère à la fin du mois. C'est l'été au pays de Riaan et il fait aujourd'hui 25°C, un pays qui sera sous le feu des projecteurs en 2010 avec la coupe du monde de football. Je suis ravi d'être d'épaulé par Riaan pour ce projet dont le but est de proposer une implémentation du protocole Modbus en Python. Vive la magie d'Internet et de l'open-source. N'hésitez pas à nous rejoindre si ce projet vous intéresse.

Si l'idée de la chaleur sud-africaine n'a pas suffit à vous faire oublier les frimas hexagonaux, je vous propose d'aborder rapidement un projet très utile pour le développement sous Django et qui porte un nom qui évoque le sud. South est une application Django pour résoudre simplement le problème de la mise à jour du modèle de données sous Django.

En effet, Django facilite grandement la réalisation d'applications web avec une base de données grâce à son ORM (Mapping Objet Relationnel) qui permet l'accès à la base de donnée via une simple classe Python.

Imaginons que vous souhaitiez gérer les livres de votre bibliothèque dans une base de données, il vous suffirait de définir une classe model en Django de la manière suivante:

class Livre(models.Model):
titre = models.CharField(max_length=100)
auteur = models.CharField(max_length=100)

Django, grâce à son ORM, se charge ensuite complètement de l'interface avec la base de données, y compris la création des tables, et vous évite d'écrire le code SQL dont le syntaxe peut varier en fonction des différents moteurs de base de données que vous utilisez. Récupérer le nom de tous les livres de bibliothèque se résume en une ligne:

Livre.objects.all()

Inutile de vous dire combien il est agréable d'éviter les pièges du SQL avec l'ORM de Django en particulier grâce aux possibilités de filtres et tris qui remplacent les clauses WHERE et ORDER BY du SQL.

La limite de l'ORM de Django vient lorsqu'il est nécessaire de faire évoluer le modèle de données. Imaginons que vous souhaitiez ajouter la date de publication de chaque livre, votre modèle devient

class Livre(models.Model):
titre = models.CharField(max_length=100)
auteur = models.CharField(max_length=100)
pub_date = models.DateTimeField()

Il vous faut faire évoluer la base pour ajouter une nouvelle colonne à la table Livre. Malheureusement la commande syncdb pour la mise à jour de la base de données ne gère pas les modifications apportés sur une table. La solution proposée par Django consite à faire afficher le SQL nécessaire pour la création des tables par la commande sqlall et de l'adapter pour créer les requêtes ALTER TABLE nécessaire. La manipulation est un peu pénible voire source d'erreur en particulier si l'on possède plusieurs bases (développement, test, production). Il y a toujours un doute sur la mise à jour d'une des bases.

South propose de remédier à ces problèmes en générant automatiquement les scripts de mise à jour de la base et en gérant une table des versions du modèle de données.

La commande python manage.py convert_to_south app_name permet d'intégrer South à votre application Django.

Au fil du développement, vous générez chaque fois que nécessaire, les scripts de mise à jour du modèle par la commande :
python manage.py startmigration app_name migration_name --auto
Celle-ci génère un petit script Python qui contient les actions nécessaires pour faire évoluer le modèle de données. Vous pouvez si vous le souhaitez éditer ce script pour ajouter des actions supplémentaires nécessaires à la migration comme par exemple l'insertion de données dans une table.

Lorsque vous souhaitez migrer une application, la commande python manage.py migrate se charge de détecter quelle est la version actuelle de la base et exécute en fonction les scripts nécessaires à la migration.

Pour moi, South est l'outil indispensable d'un site avec Django et éviter que le déploiement soit un casse-tête. Il évitera sans aucun doute aux webmasters de trop s'échauffer lors du déploiement d'une application Django. ;-)

A bientôt.

Retour à La Une de Logo Paperblog

A propos de l’auteur


Luc 11 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossier Paperblog

Magazine