Avant d'introduire les différences entre les frameworks ORM de Python (Django et SQLAlchemy), nous devons d'abord nous assurer de bien comprendre le but du framework ORM.
ORM signifie Object Relational Mapping. Regardons tour à tour ces trois mots, qui expliquent exactement à quel point l'ORM est utile dans un environnement réel :
Quantity Objets – Cette partie représente des objets utilisant des frameworks et des langages de programmation, tels que Python.
weight Relationship – Cette partie représente la base de données RDBMS (Relational Database Management System) utilisée. Celles-ci incluent de nombreuses bases de données relationnelles populaires, et vous utilisez peut-être les bases de données suivantes : MSSQL, MySQL, Oracle Database, PostgreSQL, MariaDB, PerconaDB, TokuDB. Le point commun de la plupart des bases de données relationnelles est leur structure relationnelle (tables, colonnes, clés, contraintes, etc.).
Quantity Mapping – La dernière partie représente le pont et la connexion entre les objets et les tables de données dans les deux premières parties.
On peut donc conclure que ORM est conçu pour connecter les langages de programmation et les bases de données afin de simplifier le processus de création d'applications qui s'appuient sur des données.
Comparaison entre Django et SQLAlchemy Enregistrement d'activité vs cartographie des donnéesDjango ORM est implémenté à l'aide d'enregistrements actifs - cette implémentation est visible dans la plupart des ORM. Fondamentalement, on peut dire que chaque ligne de la base de données est directement mappée à un objet dans le code, et vice versa. Les frameworks ORM (comme Django) n'ont pas besoin de prédéfinir le schéma pour utiliser les propriétés dans le code, ils ont juste besoin de les utiliser car le framework peut "comprendre" la structure en regardant le schéma de la base de données. De plus, il est possible de simplement enregistrer l'enregistrement dans la base de données car il est également mappé à une ligne spécifique du tableau.
SQLAlchemy est implémenté à l'aide du mappage de données — lorsqu'il est implémenté de cette façon, il existe un écart entre la structure de la base de données et la structure de l'objet (elles ne sont pas 1:1 comme l'implémentation d'Active Record). Dans la plupart des cas, une couche de persistance supplémentaire doit être utilisée pour maintenir l'interaction avec la base de données (comme l'enregistrement d'objets). Vous ne pouvez donc pas simplement appeler la méthode save() lorsqu'elle est implémentée avec des enregistrements actifs (opposition), mais d'un autre côté, le code n'a pas besoin de connaître le fonctionnement de l'ensemble de la structure relationnelle dans la base de données, car il n'y a pas de relation directe entre le code et la base de données.
Alors, qui gagne parmi eux ? rien. Cela dépend de ce que vous voulez réaliser. Je pense que si votre application est principalement un programme CRUD (Créer, Lire, Mettre à jour, Supprimer) sans utiliser de règles difficiles et complexes entre différentes entités de données, alors vous devriez opter pour l'implémentation Active Record (Django). Il vous aidera à mettre en place un MVP pour votre produit facilement et rapidement sans aucune difficulté. S'il existe de nombreuses « règles métier » et contraintes, il est préférable d'utiliser un modèle de mappage de données car il ne lie pas et n'impose pas le strict respect des considérations liées à l'enregistrement des activités.
Utilisez des requêtes complexesDans certains cas, Django et SQLAlchemy peuvent être utilisés simultanément. Le principal cas d'utilisation que j'ai vu à plusieurs reprises dans la vie réelle est Django pour toutes les opérations CRUD régulières et SQLAlchemy pour les requêtes plus complexes, généralement des requêtes en lecture seule.
Pour plus d'informations et d'exemples à ce sujet, consultez le blog BetterWorks Engineering (nous n'avons aucun lien, mais nous aimons quand même leur blog).
Clé primaire générée automatiquementUne autre différence entre les deux frameworks est que Django peut créer automatiquement des clés primaires pour les tables, mais pas SQLAlchemy. Les clés primaires doivent être créées manuellement pour chaque table. Peser le pour et le contre : quel cadre, selon vous, est le mieux conforme à la clé primaire d'une table ? Cela peut être déterminé à votre propre discrétion en fonction des connaissances et de l'expérience de l'équipe.
Soumission automatiquePar défaut, Django sera automatiquement soumis, mais pas SQLAlchemy. La validation automatique affecte la façon dont vous utilisez le framework (transactions, restaurations, etc.).
Bases de données prises en chargeDjango et SQLAlchemy fonctionnent tous deux avec MySQL, PostgreSQL, Oracle et SQLite. Si vous utilisez MSSQL, vous devez utiliser SQLAlchemy car il prend entièrement en charge MSSQL et vous pouvez également trouver plus d'informations et de documentation connexes.
Courbe d'apprentissageIl existe une opinion répandue en ligne selon laquelle Django est plus facile à apprendre. Cela est évident puisqu’il est généralement utilisé pour des cas d’utilisation qui ne sont pas particulièrement complexes. Par conséquent, vous devez réfléchir aux efforts que vous êtes prêt à investir dans l’apprentissage du framework et dans l’apprentissage croisé avec SQLAlchemy pour gagner plus de flexibilité (en supposant que vous en ayez vraiment besoin).
GemeinschaftsgrößeOhne Zweifel verfügt SQLAlchemy über die größte Community unter den Python-ORM-Frameworks. Wenn Ihnen die Community wichtig ist (und ich denke, das sollte sie auch sein), sollte SQLAlchemy Ihre Wahl sein. Das bedeutet nicht, dass Sie keine Hilfe für andere Frameworks wie Django finden. Sie können von StackOverflow auch Fehlerbehebungen, Antworten auf Fragen und andere benötigte Hilfe erhalten, aber die Chancen sind nur höher als bei SQLAlchemy.
LeistungIch halte es für unverantwortlich, hier einfach zu schreiben (X ist schneller als Y). Da ORMs über so viele Funktionen und Fähigkeiten verfügen und sich in jedem Framework unterscheiden, wäre es schwierig, Schlussfolgerungen zu ziehen. Meiner Erfahrung nach kann die Art und Weise, wie Sie Framework-Funktionen nutzen, einen großen Einfluss auf die Gesamtleistung der Datenschicht in Ihrer Anwendung haben. Daher empfehle ich, ein Framework nicht auf der Grundlage der Leistung auszuwählen, sondern zu lernen, wie man das Framework rational nutzt.
Wenn Sie rohe SQL-Abfragen in einem ORM-Framework verwenden, Jooq verwenden oder nur einen Teil der Abfrage ohne ORM verwenden, können Sie sich über den EverSQL-Abfrageoptimierer informieren, der wahrscheinlich der einfachste Weg ist, jede Abfrage zu optimieren.
ZusammenfassungBei jedem Vergleich halte ich es für das Beste, die Entscheidungsbefugnis wieder dem Leser zu überlassen. Jeder Anwendungsfall ist anders und unterschiedliche Technologien können besser geeignet sein. Schauen Sie sich die oben genannten Unterschiede an und teilen Sie uns Ihre Entscheidung mit.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!