Bases de données
Introduction
Une base de données est simplement un espace de stockage de données. La donnée étant le cœur de tout système informatique moderne, les bases de données sont soumises à des impératifs de fiabilité (intégrité des données, cohérence des données, temps de réponse…).
Une base de données relationnelle est un espace de stockage contenant des données organisées selon des tables et des relations.
Ces données sont manipulables via des opérations d’algèbre relationnelle.
Il faut bien distinguer l’organisation de la base de données (schéma avec les tables, leurs colonnes et clés primaires, secondaires et leurs relations réalisées par les clés étrangères (relation un à un, un à plusieurs ou plusieurs à plusieurs)) et le contenu de ces tables qui représentent les données elles-mêmes.
Les bases de données relationnelles sont les plus utilisées et parmi elles, les solutions libres sont des références. D’autres types de base de données sont également utilisés, comme les bases de données objets, les bases de données XML et les bases de données orientées document.
Accès à une base de données relationnelle
1. Point d’entrée
Python définit une API qui permet d’homogénéiser l’utilisation des différentes bases de données. Le wiki de Python définit LE point d’entrée à connaître pour toucher à une base de données relationnelle (http://wiki.python.org/moin/DatabaseProgramming/).
Ce point d’entrée permet d’accéder à la PEP 249 qui décrit très clairement DB-API et donne toutes les clés pour connaître la manière de s’en servir et de très nombreuses ressources sur le sujet, y compris les réflexions sur le futur.
Cette page est très centrée sur PostgreSQL, puisque cette base de données est aujourd’hui la plus robuste, la plus performante et la plus complète en termes de fonctionnalités, et est en cela une référence. Cependant, l’API s’applique aussi à d’autres bases dont une liste est présentée dans le tout premier lien de la page (http://wiki.python.org/moin/DatabaseInterfaces).
Les bases relationnelles concernées sont IBM DB2, Firebird (and Interbase), Informix, Ingres, MySQL, Oracle, PostgreSQL, SAP DB (aussi appelée MaxDB), Microsoft SQL Server et Sybase et chacune dispose de différents modules d’interfaçage, chacun ayant ses caractéristiques.
2. MySQL
MySQL est une base de données relativement légère qui, à l’origine, a été conçue autour de l’idée de faire très peu de choses (pas de clés étrangères, pas de relations...) pour pouvoir les faire vite. Peu à peu, elle s’est étoffée en se dotant de composants essentiels de l’algèbre relationnelle. À l’heure...
Utilisation d’un ORM
1. Qu’est-ce qu’un ORM ?
ORM est l’acronyme de Object Relational Mapping, soit en français « interfaçage objet-relationnel ». Un ORM a pour but la manipulation des données issues d’une base de données relationnelle à travers la manipulation de simples objets.
Les plus avant-gardistes y voient un premier pas avant la généralisation des bases de données objet qui remplaceraient, selon eux, à terme les bases de données relationnelles. À vrai dire, ce n’est pas pour tout de suite et les bases de données relationnelles ont encore de beaux jours devant elles.
Pour faire simple, au lieu de manipuler des tableaux de données, on manipule des objets et par conséquent, on profite de la syntaxe objet de de la sémantique liée aux objets.
L’efficacité d’un ORM est donc intimement liée au modèle objet du langage de programmation. Celui de Python étant exceptionnel, les ORM Python proposent des fonctionnalités très avancées et très efficaces.
Derrière cette approche objet, l’ORM a également pour vocation de lisser les différences entre les différentes bases de données.
2. ORM proposés par Python
Les bases de données relationnelles étant au cœur d’un nombre conséquent d’applications et les possibilités du modèle objet de Python étant prodigieuses et permettant différentes visions, la concurrence est importante (http://wiki.python.org/moin/HigherLevelDatabaseProgramming).
Si certaines solutions se démarquent uniquement par leurs performances ou leurs couvertures fonctionnelles, d’autres sont assez originales. La plupart des solutions proviennent de projets plus larges et ont été réorganisées...
Autres bases de données
1. CSV
CSV est l’abréviation de Comma Separated Values et est, à l’origine, comme son nom l’indique, un fichier textuel présentant des données séparées par des virgules. Cependant, la virgule pouvant être utilisée au sein d’une valeur, et d’autres problématiques pouvant survenir en fonction du contenu des données et des habitudes de représentation inhérentes aux différents langages, d’autres formatages ont vu le jour. Ils sont appelés dialectes. Voici les grands principes qui sont vrais quel que soit le dialecte :
-
Les données sont présentées sous forme tabulaire.
-
Chaque ligne du fichier CSV correspond à une ligne du tableau.
-
Chaque colonne du fichier CSV est délimitée à droite et à gauche par le séparateur ou (exclusif) par une fin de ligne.
-
La première ligne du fichier peut être utilisée pour contenir les en-têtes des colonnes, mais ceci n’est en rien obligatoire.
-
En fonction du formalisme, il peut être admis que toutes les lignes n’aient pas le même nombre de colonnes ou bien cela peut être considéré comme une erreur.
De manière à manipuler des données réelles, qui ont un sens et que l’on est susceptible d’aller manipuler, voici un lien pour télécharger des données sur les communes, régions et départements français (http://www.insee.fr/fr/methodes/nomenclatures/cog/telechargement.asp).
Python dispose des outils nécessaires pour accéder à bas niveau aux données d’un fichier CSV, mais il dispose également des outils nécessaires pour représenter ces données à l’aide de simples listes et dictionnaires qui sont des objets...
LDAP
1. Protocole
LDAP est le sigle de Lightweight Directory Access Protocol et est, comme son nom l’indique, un protocole destiné à accéder à des données présentées dans un annuaire, sous une forme arborescente standardisée.
Ce protocole inclut un modèle de données, un modèle de nommage, un modèle fonctionnel, un modèle de sécurité et un modèle de réplication.
2. Serveurs
Il existe une multitude de serveurs qui permettent de créer des annuaires LDAP et que l’on nomme serveurs LDAP ou implémentations du protocole LDAP. Les deux principaux sont openLDAP et Apache Directory Server.
Le premier est une implémentation libre stockant les données dans une base BerkeleyDB, mais pouvant les stocker d’autres manières. Il est une référence absolue car très éprouvé, très performant, fiable et disposant d’une communauté impressionnante de compétence et de réactivité, entre autres qualités.
Apache Directory Server est une version développée en Java, destinée à contenter les puristes du tout Java en leur permettant d’intégrer, voire embarquer un serveur LDAP écrit en Java. Il est assez répandu par besoin d’homogénéité pour les grandes applications Java, mais Python comme toute autre technologie peut bien entendu y accéder.
3. Terminologie
Les données sont présentées sous forme d’une structure arborescente. Celle-ci dispose donc d’une racine (root) dont le nommage est conforme, par convention, à la branche DNS représentant le positionnement de l’annuaire. Toutes les données se rattachent à cette racine.
Les données qui sont terminales (n’ont pas de données rattachées)...