Les ORM en Python : Comparaison et Utilisation

Utiliser un ORM
Vidéo non disponible ! Réessayez plus tard
Cette vidéo fait partie de la formation
Maîtriser Python
Revoir le teaser Je m'abonne
5,0
Transcription

Description Programme Avis
5,0

L'objectif de cette vidéo est de familiariser les développeurs avec les choix d'ORM disponibles en Python, comprendre les contextes d'utilisation appropriés, et offrir une démonstration pratique de Peewee.

Découvrez les principaux ORM en Python : SQL Alchemy, Django ORM et Peewee. Examinez leurs utilisations et avantages.

Le monde des bibliothèques qui permettent de manipuler les bases de données est vaste. Parmi les ORM, il y a SQL Object, SQL Alchemy, Peewee, l'ORM de Django, Pony ORM. C’est important de choisir le bon ORM selon ses besoins spécifiques.
SQL Alchemy se distingue comme étant le plus efficace et puissant, parfait pour les gros projets. L'ORM de Django est intégré avec le framework Django, ce qui le rend idéal pour les projets web développés avec ce framework. Peewee, un ORM plus léger, est excellent pour les petits projets et pour ceux qui débutent avec les ORM.
L'utilisation d'un ORM simplifie grandement la manipulation des bases de données tout en permettant des validations de données automatisées, ainsi qu'une écriture plus claire et plus maintenable du code Python. La démonstration sur Peewee inclut l'installation de la bibliothèque, la connexion à une base de données SQLite, et la création de classes représentant les tables de données.

Voir plus
Questions réponses
Quel ORM est considéré comme le plus puissant en Python ?
SQLAlchemy est généralement considéré comme le plus puissant et robuste des ORM disponibles en Python.
Quel est l'avantage principal de Peewee par rapport à SQLAlchemy ?
Peewee est plus léger et plus facile à prendre en main, ce qui le rend parfait pour les petits projets et les débutants.
Pourquoi pourrait-on préférer utiliser l'ORM de Django ?
On pourrait préférer l'ORM de Django si on utilise déjà Django pour un projet web, car il est intégré de manière optimale avec ce framework.
Le monde des bibliothèques qui permettent de manipuler les bases de données est vaste. Et même parmi la spécialisation des ORM, il y a quand même pas mal de choix. Par exemple, pour Python, vous avez SQL Object, vous avez SQL Alchemy, vous avez Peewee, vous avez l'ORM de Django, vous avez Pony ORM. Bref, pas évident de choisir quel ORM. Ensuite, dans quel cas va-t-on utiliser un ORM ? C'est une bibliothèque supplémentaire à installer. Et puis, il faut connaître le SQL assez bien puisque l'ORM va générer le SQL pour vous automatiquement. Et si jamais vous ne savez pas ce qui se passe sous le capot, ça peut poser des problèmes au niveau des performances. Donc, comment choisir son ORM ? Eh bien, ce n'est pas évident, mais en Python, il y a trois grands ORM pour trois catégories différentes. Nous avons d'abord SQL Alchemy qui est le roi des ORM. C'est probablement le meilleur de tous les ORM en Python et le plus efficace, le plus riche, le plus puissant et le plus robuste. Il est très ancien, mais aussi très moderne dans ses dernières mises à jour. C'est un ORM qui est excellent non seulement dans le monde de Python, mais même comparé aux ORM dans d'autres langages. C'est aussi un ORM qui est assez gros et assez complexe. Il est difficile à prendre en main et la documentation est assez austère. Aussi, prenez SQL Alchemy si vous souhaitez utiliser un ORM dans le cadre d'un gros projet. Ensuite, il y a l'ORM de Django. L'ORM de Django, c'est un ORM assez équilibré qui a quelques petites problématiques ici et là, mais qui est plutôt assez intuitif, mais surtout qui est lié à Django. Si vous voulez utiliser l'ORM de Django, il faut télécharger tout le framework avec. Le framework Django est un framework web que vous n'avez pas nécessairement envie d'utiliser, ni même dont vous n'avez pas nécessairement besoin. Et quand bien même vous en auriez besoin, il est possible que vous ayez envie d'une solution alternative. L'ORM de Django est très bien intégré forcément à Django. Donc, si vous créez un site web et que Django est votre technologie de choix, ce qui est une excellente technologie pour créer un site web, dans ce cas, vous pouvez utiliser l'ORM de Django puisqu'il est fourni avec. Enfin, il y a Peewee. Peewee est un tout petit ORM. C'est une version miniature de SQL Alchemy. Et il est assez robuste, plutôt bien fait. Et c'est un très bon point de départ si vous avez un petit projet, mais que vous voulez quand même bénéficier du principe des ORM. Donc, pour cette vidéo, nous allons partir sur Peewee puisqu'il est beaucoup plus facile pour moi de vous en faire la démonstration. Peewee, évidemment, n'est pas disponible dans la bibliothèque standard. Il va donc falloir l'installer avec un petit pip install Peewee derrière. Et une fois qu'on l'a installé, on peut l'utiliser avec une base de données SQLite directement. Peewee est soumis aux mêmes contraintes que toutes les autres manipulations de bases de données relationnelles, à savoir qu'il faut installer le bon driver pour pouvoir taper dans la bonne base de données. Et là, en l'occurrence, pour une base de données SQLite, aucun problème. On importe l'objet Peewee et derrière, on fait une connexion à la base de données. Ensuite, et c'est là que c'est intéressant avec les ORM, on crée une classe en Python. Et c'est cette classe qui va décrire notre modèle de données. Cette classe doit automatiquement hériter de Peewee.model. Et elle va être, par son nom, liée à une table qui est à l'intérieur de la base de données. Ensuite, pour chaque colonne de la table, on va créer des variables qui portent le même nom que le nom de la colonne de la table. En valeur de ces variables, nous allons mettre des champs qui sont fournis par Peewee et qui correspondent à certains types de données. Ces champs peuvent avoir plein de propriétés. Par exemple, vous pouvez leur mettre des valeurs par défaut, des contraintes, etc. Et c'est un des grands avantages de l'ORM. Il permet de vous faire la validation des données en plus de faire la création des données. Ici, vous décrivez donc votre table au lieu de la décrire en pur SQL. Cela a plusieurs avantages. Le premier, c'est que vous avez un endroit centralisé où sont décrites les tables. Le second, c'est que vous bénéficiez évidemment de tous les outils de manipulation Python. Le troisième, c'est qu'en Python, vous pouvez inspecter très facilement cet objet et donc faire tout un tas de métaprogrammations autour de l'objet. Et c'est pour cette raison qu'on voit très souvent des bibliothèques utiliser les ORM pour générer, par exemple, des formulaires, des API, etc. C'est une des raisons pour lesquelles Django a été si populaire. Grâce à son ORM, un énorme écosystème a pu fleurir autour puisque, sachant qu'on avait une base commune pour pouvoir travailler tous ensemble, ils ont chacun pu bénéficier de cette base commune pour pouvoir l'étendre. Si on utilise purement du SQL, ce n'est malheureusement pas le cas. Enfin, on va utiliser ce qu'on appelle une inner class, une classe à l'intérieur d'une classe. Ici, c'est une classe Meta. Le nom n'a absolument aucune importance, mais c'est généralement une convention d'appeler Meta la classe que l'on va utiliser pour pouvoir déterminer des informations à propos de la classe supérieure. La classe Meta est utilisée par Django également. Et ici, vous voyez qu'on fait le lien avec la base de données au niveau de la classe Meta. Donc, on dit que le produit sera lié à cette base de données. Ensuite, on utilise notre classe pour pouvoir créer la table associée et on lui met un fail silent lié égal true de telle sorte que si jamais cette table existe, eh bien, il n'y ait pas d'erreur. Ensuite, nous allons insérer des données dans la base de données. Au lieu de générer le SQL nous-mêmes à la main, nous allons utiliser la méthode create de la classe Product en lui passant les paramètres directement. La requête SQL liée à la base de données SQLite sera générée automatiquement. L'avantage de cette méthode est double. Le premier, eh bien, c'est tout simplement que quel que soit le SQL que vous avez à générer, il sera toujours le bon. Si vous vous connectez aux bases de données SQLite, vous aurez un SQL qui correspond à cela. Si vous vous connectez à une base de données Access, vous aurez un SQL qui correspond à la base de données Access. En effet, malgré le fait que le SQL soit un langage standard et standardisé, il y a de légères variations entre chaque base de données, ce qui peut rendre la transition entre une base de données et une autre un peu difficile. Et le deuxième avantage, c'est que vous bénéficiez de tous les outils autour de Python pour pouvoir manipuler ce genre d'instructions. Regardez, si je fais product. Eh bien, j'ai l'autocompletion qui s'active automatiquement dans le Python Notebook pour pouvoir savoir de quoi j'ai besoin. Une fois que j'ai fait ceci, j'ai créé trois entrées en base de données. Je peux faire ma requête de sélection. Et là, encore une fois, je ne vais pas créer le SQL à la main. Je vais demander à la méthode Select de la classe Product de me fournir la requête, de l'exécuter et de me donner le résultat qui se fera sous forme d'itérable. Enfin, quelque chose d'intéressant, c'est que je ne récupère pas les données sous forme d'un simple tuple. Je récupère les données sous forme d'objet Product. Et donc, si jamais Product a des méthodes, je pourrais les utiliser. Ici, je fais donc product.name et product.price pour pouvoir manipuler l'objet derrière. Et c'est un intérêt non négligeable si j'ai envie de faire des modifications ou quoi que ce soit, puisque au lieu de manipuler des requêtes, je manipule un simple objet Python. Si vous voulez faire des requêtes plus avancées, par exemple, filtrer, vous pouvez le faire ici. En effet, PeeWee supporte une grande majorité des instructions SQL avec son propre jargon, bien entendu, puisque c'est un LRM. Donc, par exemple, si je veux filtrer sur le price, je vais effectuer ceci et je vais m'obtenir uniquement deux résultats.

Programme détaillé de la formation

2 commentaires
5,0
2 votes
5
4
3
2
1
michelkreutner
Il y a 9 months
Commentaire
Les explications sont claires et concises. Ce cours sur l'utilisation avancée de Python est tres intéressant. Il vous apportera des connaissances que vous pourrez ensuite approfondir.
Je suis vraiment tres satisfait par cette première formation suivie sur Python.
yvan.vogel
Il y a 2 years
Commentaire
Hello, sur la video autour de asyncio, vous utilisez python 2.7.12. J'utilise python 3.10, aussi je souhaite faire partager mon code (qui fonctionne) selon ma vision et compréhension sur le sujet d'étude que vous avez proposé. Yvan Vogel.

#CODE en python 3.10.0 64 bits (VScode 1.62.3)
import datetime
import asyncio
import aiohttp
import requests


# ----------------------------------------------------------------------------------------------------------------------------
def req_bloquante(num):
print(f"Get {num}")
uid = requests.get("https://httpbin.org/uuid").json()["uuid"]
print(f"Res {num}: {uid}")


def faire_toutes_les_requetes():
for x in range(51):
req_bloquante(x)


print("=====> ### Bloquant : ")
start = datetime.datetime.now()
faire_toutes_les_requetes()
exec_time = (datetime.datetime.now() - start).seconds
print(f"Downloading all take {exec_time} seconds\n")

# ----------------------------------------------------------------------------------------------------------------------------


async def requeteSansBloquer(semaphore, num, session):
print(f"Get {num}")
# await semaphore.acquire() # putting this await semaphore commande the Res is ordering but process very slow ~60 sec
async with session.get("https://httpbin.org/uuid") as response:
uid = (await response.json())["uuid"]
# await asyncio.sleep(delay=3) #delay = number of seconds
# semaphore.release()
print(f"Res {num}: {uid}")
# return uid # ?


async def main():
semaphore = asyncio.Semaphore(value=1)
tasks = []
async with aiohttp.ClientSession(
loop=loop, connector=aiohttp.TCPConnector(ssl=False)
) as session:
for x in range(51):
tasks.append(requeteSansBloquer(semaphore, x, session))
await asyncio.gather(*tasks)
print("This is after the loop...")


if __name__ == "__main__":
print("=====> ### Non Bloquant : ")
start = datetime.datetime.now()
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
exec_time = (datetime.datetime.now() - start).microseconds
print(f"Downloading all take {exec_time} micro seconds\n")
Nos dernières formations Python
  • Pack 5 formations
    Pack Python : Des bases aux techniques avancées
    Découvrir
    Réputé pour être le langage de programmation le plus populaire au monde, Python est très plébiscité pour ses différentes utilisations.  A travers ce pack de 5 formations, vous apprenez les fondamentaux de la programmation Python, vous maîtrisez les techniques avancées et vous découvrez comment utiliser Python pour le web et pour l’analyse et la visualisation des données. Apprendre à programmer en Python : Apprendre les fondamentaux du langage de programmation Python. Apprendre Python : Qualité de code et maintenance : Maîtriser Python avec une qualité de code et de maintenance optimales. Maîtriser Python : Techniques avancées : Formez-vous aux différentes fonctionnalités avancées de python. Apprendre le web avec Python/ Django : Découvrez la programmation Web : Apprendre les principes fondamentaux de la programmation Web Maîtriser Python : Analyse et visualisations des données : Apprendre à utiliser Python pour l’analyse et la visualisation des données
    22h52 154 leçons
  • Maîtrisez Python : Analyse et visualisations des données
    Découvrir
    Apprendre à utiliser Python pour l’analyse et la visualisation des données.
    3h47 3,50 / 5
  • Apprendre Python   - Qualité de code et maintenance
    Découvrir
    Maîtriser Python avec une qualité de code et de maintenance optimales
    3h09 23 leçons
  • Apprendre à programmer en Python
    Découvrir
    Apprendre les fondamentaux du langage de programmation Python
    6h33 60 leçons 4,75 / 5
  • Apprendre le Web avec Python/Django - Découvrez la programmation web
    Découvrir
    Apprendre les principes fondamentaux de la programmation Web
    4h38 32 leçons 3,50 / 5