Soy nuevo tanto en flask como en sqlalchemy, acabo de empezar a trabajar en una aplicación de flask y estoy usando sqlalchemy por ahora. Me preguntaba si hay algún beneficio significativo que pueda obtener al usar flask-sqlalchemy vs sqlalchemy. No pude encontrar suficientes motivaciones en http://packages.python.org/Flask-SQLAlchemy/index.html o tal vez no entendí el valor. Agradecería sus aclaraciones.
93
flask-sqlalchemy
son más viejo y simplesqlalchemy
en una aplicación frasco?Flask-SqlAlchemy
que no proporciona ninguna forma de configurar la tenencia múltiple en la aplicación. Eso es lo más negativo de la OMI.binds
lo único que se proporciona es adjuntar una base de datos diferente a un modelo diferente, mientras que no hay forma de usar una base de datos específica de inquilinos con el mismo modelo.Respuestas:
La característica principal de la
Flask-SQLAlchemy
es la integración adecuada con la aplicación Flask: crea y configura el motor, la conexión y la sesión y lo configura para que funcione con la aplicación Flask.Esta configuración es bastante compleja, ya que necesitamos crear la sesión con alcance y manejarla adecuadamente de acuerdo con el ciclo de vida de solicitud / respuesta de la aplicación Flask.
En el mundo ideal, esa sería la única característica de
Flask-SQLAlchemy
, pero en realidad agrega algunas cosas más. Aquí hay una buena publicación de blog con una descripción general de ellos: Desmitificando Flask-SQLAlchemy .Cuando trabajé por primera vez con Flask y SQLAlchemy, no me gustó esta sobrecarga. Fui y extraje el código de administración de sesión de la extensión. Este enfoque funciona, aunque descubrí que es bastante difícil hacer esta integración correctamente.
Entonces, el enfoque más fácil (que se usa en otro proyecto en el que estoy trabajando) es simplemente ingresar
Flask-SQLAlchemy
y no usar ninguna de las funciones adicionales que proporciona. Tendrá eldb.session
y podrá usarlo como si fuera unaSQLAlchemy
configuración pura .fuente
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.
Vea más detalles en los documentos de SQLAlchemy: ¿ Cuándo construyo una sesión, cuándo la confirmo y cuándo ¿cierralo? y sesiones contextuales / locales de subprocesos .Para ser honesto, no veo ningún beneficio. En mi humilde opinión, Flask-SQLAlchemy crea una capa adicional que realmente no necesitas. En nuestro caso tenemos una aplicación Flask bastante compleja con múltiples bases de datos / conexiones (maestro-esclavo) usando tanto ORM como Core donde, entre otras cosas, necesitamos controlar nuestras sesiones / transacciones DB (por ejemplo, modos dryrun vs commit). Flask-SQLAlchemy agrega algunas funcionalidades adicionales, como la destrucción automática de la sesión, asumiendo algunas cosas por usted que a menudo no son lo que necesita.
fuente
Flask-SQLAlchemy le ofrece una serie de buenos extras que, de lo contrario, terminaría implementando usted mismo usando SQLAlchemy.
Lados positivos sobre el uso de Flask-SQLAlchemy
apply_driver_hacks
que establece automáticamente los valores predeterminados sanos en cosas como el tamaño del grupo de MySQLEstablecer nombres de tablas automáticamente. Flask-SQLAlchemy establece automáticamente los nombres de sus tablas convirtiendo su
ClassName
>class_name
esto se puede anular configurando la__tablename__
clase Elemento de listaLos lados negativos del uso de Flask-SQLAlchemy
fuente
La documentación de SQLAlchemy establece claramente que debe usar Flask-SQLAlchemy (¡especialmente si no comprende sus beneficios!):
Puede encontrar esta cita y una motivación detallada en la segunda pregunta de las Preguntas frecuentes de la sesión .
fuente
como sugiere @schlamar, Flask-SqlAlchemy es definitivamente algo bueno. Me gustaría agregar un poco de contexto adicional al punto que se hizo allí.
No sienta que está eligiendo uno sobre el otro. Por ejemplo, digamos que queremos tomar todos los registros de una tabla usando un modelo usando Flask-Sqlalchemy. Es tan simple como
Para muchos de los casos simples, Flask-Sqlalchemy va a estar totalmente bien. El punto adicional que me gustaría hacer es que si Flask-Sqlalchemy no va a hacer lo que usted quiere, entonces no hay razón para que no pueda usar SqlAlchemy directamente.
Como puede ver, podemos saltar fácilmente de uno a otro sin problemas y, en el segundo ejemplo, de hecho estamos usando los modelos definidos por Flask-Sqlalchemy.
fuente
Model.query.all()
" - todo esto se puede hacer solo con SQLAlchemy, usar Flask-SQLAlchemy no proporciona absolutamente nada nuevo aquí.Model.query.all()
adb.session.query(Model).all()
por alguna razón permitió que las sesiones rastrearan y actualizaran normalmente.Aquí hay un ejemplo de un beneficio que el frasco-sqlalchemy le brinda sobre el simple sqlalchemy.
Suponga que está usando flask_user.
flask_user automatiza la creación y autenticación de objetos de usuario, por lo que necesita acceder a su base de datos. La clase UserManager hace esto llamando a algo llamado "adaptador" que abstrae las llamadas a la base de datos. Proporciona un adaptador en el constructor UserManager y el adaptador debe implementar estas funciones:
Si está usando flask-sqlalchemy, puede usar el SQLAlchemyAdapter incorporado. Si está utilizando sqlalchemy (not-flask-sqlalchemy), puede hacer diferentes suposiciones sobre la forma en que los objetos se guardan en la base de datos (como los nombres de las tablas), por lo que tendrá que escribir su propia clase de adaptador.
fuente