:TODO_DOCUPDATE: ====== 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 ===== * http://www.pythoncentral.io/introductory-tutorial-python-sqlalchemy/ * https://www.youtube.com/watch?v=g0-7TrVCNtg