en flacon de sqlalchemy ou sqlalchemy
Je suis nouveau dans les deux fiole et sqlalchemy, je viens de commencer à travailler sur un flacon d'application, et je suis en utilisant sqlalchemy pour l'instant. Je me demandais si il n'y a aucun avantage significatif je peux obtenir de l'aide en flacon de sqlalchemy vs sqlalchemy. Je ne pouvais pas trouver assez de motivations dans http://packages.python.org/Flask-SQLAlchemy/index.html ou peut-être que je ne comprend pas la valeur!! Je vous serais reconnaissant de vos précisions.
- Hmm, il n'y a pas une réponse satisfaisante ici. Quelqu'un peut-il expliquer quels sont les réels avantages concrets de
flask-sqlalchemy
sont sur la plaine de vieuxsqlalchemy
dans une Fiole application?
Vous devez vous connecter pour publier un commentaire.
La caractéristique principale de la
Flask-SQLAlchemy
est bonne intégration avec le Flacon d'application - il crée et configure les paramètres du moteur, de la connexion et de la session et le configure pour qu'il fonctionne avec le ballon app.Cette configuration est assez complexe, car nous avons besoin de créer le l'étendue de la session et gérer correctement selon la Fiole de demande de demande de réponse du cycle de vie.
Dans un monde idéal, ce serait la seule fonction de
Flask-SQLAlchemy
, mais en réalité, il ajoute quelques trucs en plus. Voici un bon blog avec la présentation d'entre eux: Démystifier Le Flacon De SQLAlchemy.Quand j'ai d'abord travaillé avec le ballon, SQLAlchemy, je n'aimais pas cette surcharge de travail . Je suis allé sur et extrait de la session code de gestion de l'extension. Cette approche fonctionne, même si j'ai découvert qu'il est très difficile de faire cette intégration correctement.
De sorte que le plus facile d'approche (qui est utilisée dans un autre projet, je travaille sur) est simplement déposer le
Flask-SQLAlchemy
et de ne pas utiliser toutes les fonctionnalités qu'il offre. Vous aurez ladb.session
et vous pouvez l'utiliser comme si c'était de la pureSQLAlchemy
de l'installation.This setup is quite complex as we need to create the scoped session and properly handle it according to the Flask application request/response life-cycle.
Voir plus de détails dans la SQLAlchemy docs: Quand dois-je construire une Session, quand je m'engage, et quand je le ferme? et Contextuel/Thread-Séances locales.Pour être honnête, je ne vois pas tous les avantages. À mon humble avis, en Flacon de SQLAlchemy crée une couche supplémentaire que vous n'avez pas vraiment besoin. Dans notre cas, nous avons une assez complexe Flacon application avec plusieurs bases de données/connexions (maître-esclave) en utilisant à la fois l'ORM et le Noyau, où, entre autres choses, nous devons contrôler nos séances /DB transactions (par exemple dryrun vs commettre des modes). En flacon de SQLAlchemy ajoute certaines fonctionnalités supplémentaires, tels que la destruction de la session en supposant que certaines choses pour vous qui est très souvent pas ce dont vous avez besoin.
La SQLAlchemy documentation indique clairement que vous devez utiliser en Flacon de SQLAlchemy (surtout si vous ne comprenez pas ses avantages!):
Cette citation et la motivation que vous pouvez trouver dans la deuxième question de la Session FAQ.
En flacon de SQLAlchemy vous donne un nombre de plus agréable de vous aurait d'autre fin jusqu'à la mise en œuvre vous-même à l'aide de SQLAlchemy.
Côtés positifs sur l'utilisation de la Gourde-SQLAlchemy
apply_driver_hacks
qui définit automatiquement des valeurs par défaut saines pour thigs comme MySQL à la taille du poolDéfinir automatiquement les noms de table. En flacon de SQLAlchemy règle automatiquement vos noms de table de conversion de votre
ClassName
>class_name
cela peut être remplacé par la mise en__tablename__
classeÉlément de la liste
Les côtés négatifs sur l'utilisation de la Gourde-SQLAlchemy
la migration de ballon à disons Pyramide si jamais vous avez besoin de. C'est principalement en raison de la coutume déclarative modèle de base sur Flask_SQLAchemy.
comme @schlamar suggère en Flacon de SqlAlchemy est defo une bonne chose. Id comme pour ajouter quelque supplément de contexte pour le point y fait.
Ne pas se sentir comme votre choix de l'un sur l'autre. Par exemple, disons que nous voulons récupérer tous les enregistrements d'une table à l'aide d'un modèle à l'aide de Flacon-Sqlalchemy. C'est aussi simple que
Pour un grand nombre de cas simples en Flacon de Sqlalchemy va très bien. Le point supplémentaire que je voudrais faire est que, si en Flacon de Sqlalchemy est ne va pas faire ce que vous voulez, puis theres aucune raison que vous ne pouvez pas utiliser de SqlAlchemy directement.
Comme vous pouvez le voir, nous pouvons facilement passer de l'un à l'autre sans aucun problème, et dans le deuxième exemple, nous sommes en fait à l'aide de la Fiole-Sqlalchemy modèles définis.
Model.query.all()
" -- cela peut être fait avec tout SQLAlchemy, à l'aide de Flacon de SQLAlchemy fournit absolument rien de nouveau ici.Model.query.all()
àdb.session.query(Model).all()
pour une raison quelconque admis aux sessions de suivi et de mise à jour comme d'habitude.Voici un exemple d'un avantage en flacon de sqlalchemy vous donne plus plaine de sqlalchemy.
Supposons que vous utilisez flask_user.
flask_user automatise la création et l'authentification de l'utilisateur des objets, donc il a besoin pour accéder à votre base de données. La classe UserManager le fait en appelant grâce à quelque chose appelé un "adaptateur" qui résume les appels de base de données. Vous fournir un adaptateur dans le UserManager constructeur, et l'adaptateur doivent mettre en œuvre ces fonctions:
Si vous êtes en utilisant un flacon de sqlalchemy, vous pouvez utiliser le haut-SQLAlchemyAdapter. Si vous êtes à l'aide de sqlalchemy (pas-flacon-sqlalchemy) vous pourriez faire des hypothèses différentes quant à la manière dont les objets sont enregistrés dans la base de données (comme les noms des tables) de sorte que vous aurez à écrire votre propre classe d'adaptateur.