Comprendre les modules en Python est une étape importante pour l’apprentissage du langage de programmation.
Dans cet article, je ne prétends pas expliquer tout le concept, mais j’explique comment, dans un scénario très précis, j’ai compris que cela ne fonctionnait pas comment le C#, par exemple.
Le contexte
Il y a quelques mois, je travaillais sur une simple API REST pour acquérir les compétences de développement backend avec Python, Flask 3 et SQL Alchemy 2.
L’application que je construisais était un petit outil pour enregistrer le temps passé sur divers projets et tâches.
J’avais 3 modèles (sans compter le modèle de base) :
- le modèle
Project
- le modèle
Task
- le modèle
TimeRecord
Lorsque j’ai commencé à coder l’API, j’ai défini les modèles dans un fichier unique models.py
que j’importais dans un fichier main.py
où j’avais ceci :
|
|
Dans le app.py
, j’ai défini une logique simple pour réinitialiser la base de données en développement lors du démarrage du serveur :
|
|
Le problème
Une fois que j’eus terminé les points de terminaison de l’API Project
, je suis passé à ceux de l’API Task
et j’ai voulu diviser les modèles en fichiers individuels.
|
|
Bien que cela n’ait pas empêché d’ajouter des projets après avoir mis à jour les importations, cela a cassé la réinitialisation de la base de données…
Lorsque j’exécutais la requête de création d’un projet juste après avoir redémarré le serveur, j’ai remarqué l’erreur concernant la contrainte unique du nom du projet.
Ensuite, j’ai remarqué qu’après le dernier redémarrage du serveur, le terminal ne traçait pas le code SQL habituel exécuté par SQLAlchemy lors de l’initialisation de la base de données après le redémarrage.
Pourquoi
En Python, un fichier correspond à un module. Ainsi, l’import dans le code de main.py
ci-dessus est devenu :
|
|
Sauf que seul Model
est chargé et même en ajoutant les imports pour les entités Project
, Task
et Timerecord
, Model.metadata.drop_all()
n’exécutait rien…
Comment utiliser des fichiers fractionnés et conserver les fonctionnalités ?
Ne le faites simplement pas.
Je pense que c’est une habitude de développer en .NET depuis 15 ans. Mais en programmation Python, et si vous utilisez l’ORM SQLAlchemy, gardez le schéma de la base de données dans un seul fichier appelé database.py
ou entities.py
ou ce que vous voulez.
De plus, une autre limitation au fractionnement des fichiers est que l’utilisation de la fonctionnalité ORM qui permet de récupérer des éléments liés dans une relation entre deux modèles vous remontera quelques problèmes.
Pour en savoir plus sur Python, naviguer vers le tag.
Suivez-moi !
Merci d’avoir lu cet article. Assurez-vous de me suivre sur X, de vous abonner à ma publication Substack et d’ajouter mon blog à vos favoris pour ne pas manquer les prochains articles.
Crédit : Photo par Pixabay.