Il y a quelques temps, je vous ai parlé de base de données, un super moyen pour structurer vos données.
Vous êtes maintenant j'en suis sûr, des professionnels du SELECT, des JOIN et autres ALTER. C'est bien, très bien même, mais maintenant je vais vous apprendre à vous en passer. Et oui, la ligne de commande c'est sympa pour des choses simples et/ou rapides, mais dès que vous voulez plus de complexité, il devient difficile de travailler sans un langage de plus haut niveau.
Le but de cet article est de vous faire comprendre la notion de Mapping objet-relationnel (en anglais object-relational mapping ou ORM) ou comment transposer votre base de données en objets à utiliser dans votre code. Ben voilà, c'est fait, vous savez ce que c'est, juste un petit exemple pour enfoncer le clou :
Dans mon précédent billet, j'avais créé cette table :
1 |
sqlite> CREATE TABLE genes (gene_id TEXT, gene_start INTEGER, gene_end INTEGER, GCcontent REAL); |
et bien grâce à un ORM je vais pouvoir utiliser un objet "Genes" avec les attributs : gene_id, gene_start, gene_end et GCcontent directement dans mon code !
Pour ceux qui sont perdus et ne savent pas ce qu'est un objet en programmation, je vous redirige par ici. Pour les autres, je vais vous montrer comment faire pas à pas, en utilisant le langage Python car il me semble plus simple à appréhender et à comprendre pour le profane (et j'adore ce langage).
Installation des prérequis
Il vous faut Python bien sûr. Si vous ne savez pas si vous l'avez installé sur votre machine => par ici.
Une bibliothèque qui va jouer le rôle de l'ORM :
1 |
pip install peewee # easy_install peewee si vous n'avez pas pip |
peewee est donc une petite ORM qui vous permettra de faire le pont entre des bases de données et votre code Python. Celle-ci prend en charge des bases de données de type SQLite, PostgresSQL ou encore MySQL. Oui je ne vous l'ai pas dit, mais un des bénéfices immédiats que vous aurez à utiliser une ORM, c'est que votre code sera adapté, quel que soit le type de base de données que vous utiliserez en backend, très très pratique.
Notez qu'il existe d'autres ORM, tel que SQLAlchemy pour ne citer que cette bibliothèque. Elle supporte beaucoup plus de types de bases de données et a un support plus étendu, mais elle est plus "lourde" à installer. Peewee suffira amplement pour des projets qui ne dépasseront pas les centaines d'utilisateurs journaliers.
Préparation de l'ORM
Allez hop, on code maintenant. Vous pouvez récupérer la base de données dont je tire l'exemple si vous ne l'avez pas déjà.
On importe la bibliothèque
1 |
from peewee import * |
On définit son modèle et la base de données à utiliser :
1 2 3 |
class NotreModelDeBaseDeDonnee(Model): class Meta : database = SqliteDatabase('mesgenes.db') |
On définit la table "Genes", et comme nous l'avions fait en SQLite, je nomme les champs de ma table et je définie leur type, rappelez-vous :
1 |
sqlite> create table genes(gene_id TEXT, gene_start INTEGER, gene_end INTEGER, GCcontent REAL); |
devient :
1 2 3 4 5 6 |
class Gene(NotreModelDeBaseDeDonnee): gene_id = CharField(primary_key=True) # c'est l'identifiant unique de notre gene, on lui met donc 'primary_key' gene_start = IntegerField() gene_end = IntegerField() GCcontent = FloatField() |
C’est fait !!! Pas plus difficile que ça.
Utilisation
Voici quelques exemples de requêtes que vous pourriez faire :
Compter tous les gènes :
1 |
Genes.select().count() |
Récupérer le GC content max et le moyen :
1 |
Genes.select(fn.Max(Genes.GCcontent).alias('max'), fn.Avg(Genes.GCcontent).alias("moyenne")) |
Combien de gènes ont un GCcontent > 60% et un nombre de paires de bases > à 1500 ?
1 2 |
Genes.select().where((Genes.GCcontent > 60) & ( (Genes.gene_end - Genes.gene_start) > 1500)).count() |
Et si je n'en veux que 10 ?
1 2 |
Genes.select().where((Genes.GCcontent > 60) & ( (Genes.gene_end - Genes.gene_start) > 1500)).limit(10) |
Cela vous demandera un peu de pratique suivant l'ORM utilisé, mais au final vous gagnerez en efficacité si vous comptez travailler plus souvent avec des bases de données.
Notez que dans cet exemple, j'ai utilisé la base de donnée mesgenes.db que j'avais déjà créée. Si vous partez de rien, la commande suivante
1 |
Genes.create_table() |
va créer la base de données et la table pour vous.
Et si au contraire, vous avez déjà une base de données existante et êtes partisan du moindre effort, vous pouvez utiliser pwiz, il générera votre modèle pour vous (déjà installé par peewee). Par exemple, essayez :
1 |
pwiz.py -e sqlite mesgenes.db |
J'ai mis tout ça dans un script Python (2.X) à lancer comme ceci :
1 |
python orm.py |
(il faut que mesgenes.db se trouve dans le même répertoire).
Voilà !!
Un moyen simple et rapide pour utiliser vos données.
Merci à Yoann, nallias, ZaZo0o et Nolwenn pour leur relecture.
Laisser un commentaire