Ami*_*min 81 python sqlalchemy flask flask-sqlalchemy
我是烧瓶和sqlalchemy的新手,我刚刚开始研究烧瓶应用程序,我现在正在使用sqlalchemy.我想知道使用flask-sqlalchemy vs sqlalchemy是否有任何重大好处.我在http://packages.python.org/Flask-SQLAlchemy/index.html找不到足够的动机,或者我不明白这个价值!非常感谢您的澄清.
Bor*_*rov 56
它的主要特点Flask-SQLAlchemy是与Flask应用程序的正确集成 - 它创建和配置引擎,连接和会话,并将其配置为与Flask应用程序一起使用.
这个设置非常复杂,因为我们需要创建范围会话并根据Flask应用程序请求/响应生命周期正确处理它.
在理想的世界中,这将是唯一的特征Flask-SQLAlchemy,但实际上它增加了更多的东西.这是一篇很好的博客文章,概述了它们:揭开Flask-SQLAlchemy的神秘面纱.
当我第一次使用Flask和SQLAlchemy时,我不喜欢这种开销.我过去从扩展中提取会话管理代码.这种方法有效,但我发现很难正确地进行这种集成.
因此,更简单的方法(在我正在处理的另一个项目中使用)就是Flask-SQLAlchemy放入并且不使用它提供的任何其他功能.你将拥有它db.session,你可以使用它,就像它是纯粹的SQLAlchemy设置.
MOC*_*KBA 18
说实话,我没有看到任何好处.恕我直言,Flask-SQLAlchemy创建了一个你真正不需要的附加层.在我们的例子中,我们有一个相当复杂的Flask应用程序,它具有多个使用ORM和Core的数据库/连接(主从),其中包括我们需要控制会话/数据库事务(例如,干运行与提交模式).Flask-SQLAlchemy添加了一些额外的功能,例如自动销毁会话,假设有些东西通常不是你需要的东西.
Kim*_*kka 16
Flask-SQLAlchemy为您提供了许多额外的功能,您最终将使用SQLAlchemy实现自己.
apply_driver_hacks会自动将默认的默认值设置为像MySQL池大小一样的thigs自动设置表名.Flask-SQLAlchemy自动设置表名称转换你的ClassName> class_name可以通过设置__tablename__类列表项来覆盖它
sch*_*mar 15
SQLAlchemy文档明确指出您应该使用Flask-SQLAlchemy(特别是如果您不了解它的好处!):
[...] Flask-SQLAlchemy [...] SQLAlchemy等产品强烈建议使用这些产品.
您可以在会话常见问题解答的第二个问题中找到此引用和详细动机.
正如@schlamar建议Flask-SqlAlchemy是一个好东西.我想在这里添加一些额外的上下文.
不要觉得你选择的是另一个.例如,假设我们想使用Flask-Sqlalchemy使用模型从表中获取所有记录.它很简单
Model.query.all()
对于很多简单的案例,Flask-Sqlalchemy会完全没问题.我想提出的另一点是,如果Flask-Sqlalchemy不会做你想要的,那么没有理由你不能直接使用SqlAlchemy.
from myapp.database import db
num_foo = db.session.query(func.count(OtherModel.id)).filter(is_deleted=False).as_scalar()
db.session.query(Model.id, num_foo.label('num_foo')).order_by('num_foo').all()
正如您所看到的,我们可以轻松地从一个跳到另一个,而在第二个示例中,我们实际上使用的是Flask-Sqlalchemy定义的模型.
| 归档时间: | 
 | 
| 查看次数: | 21983 次 | 
| 最近记录: |