Outils pour utilisateurs

Outils du site


dev:python:sqlalchemy

SQLAlchemy

L' ORM est une technique employée par les langages orientés objets permettant de convertir des données entre systèmes ayant des types de données incompatibles.

Les langages orientés objets tels que Python permettent de définir des types non-scalaires qui ne peuvent pas être exprimés directement en types primitifs tels que des entiers ou des chaînes de caractères. Par exemple un objet de type Person peut contenir une liste d'objets de type Address et une liste d'objets de type PhoneNumber. A leur tour chaque objet de type Address peut contenir une liste d'objets de type PostCode ou StreetName qui eux peuvent être exprimés en chaînes de caractères ou en nombres. Ces objets complexes incluent également des méthodes de classes ou d'instances qui ne peuvent être traduites par des types.

Pour mieux faire face à la complexité de gestion des variables non scalaire notamment lorsque l'on souhaite les stocker dans des bases de données, les ORM ont été développés. L'exemple précédent peut être exprimé dans un système ORM avec des classes Person, Address etc, où chaque classe correspond à une table du système de base de données. La tâche fastidieuse d'écriture du code d’interfaçage avec la base de données choisie est gérée par le système ORM permettant au programmeur de se concentrer sur la logique.

L'ORM ajoute un niveau d'abstraction rendant les variables non-scalaires définies dans le langage de programmation plus indépendante du SGBD dans lequel elles sont sauvegardées. Avec un ORM, le SGBD sous-jacent peut être changé sans grosse modification du code.

Principes

Avec SQLAlchemy, on manipule 3 éléments importants:

  • L'objet Table qui modélise une table de la base de données.
  • Le mapper qui se charge de faire correspondre la classe Python à une table dans la base de données.
  • Un objet class qui définit comment un enregistrement dans la base de données correspond à un objet Python.

SQLAlchemy fournit declarative qui permet de regrouper le code des classes Table, mapper au sein d'une même définition de classe.

La fonction create_engine()

Petite remarque à propos de la syntaxe de la chaîne de caractère passée en paramètre à la fonction create_engine(). C'est une URL. Pour utiliser une base sqlite attention au nombre de caractères obliques:

# Base temporaire stockée en mémoire RAM
sqlite:///:memory: (ou, sqlite://)

# Chemin relatif vers la base
sqlite:///relative/path/to/file.db

# Chemin absolu vers la base
sqlite:////absolute/path/to/file.db

Références

dev/python/sqlalchemy.txt · Dernière modification : 2021/02/01 21:51 de 127.0.0.1