Flask SQL Alchemy with declarative ORM extension



我正在使用sqlalchemy ORM和Flask项目中的声明性扩展作为Web API。Flask 文档在此处显示了如何在端点内正确执行查询

现在这一切都很好,但是如果我想按查询执行组怎么办。例如,在烧瓶文档中给定用户域对象:

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String(50), unique=True)
    email = Column(String(120), unique=True)

我想检索所有同名用户的 id 总和(没有意义,为了简单起见,将其作为玩具示例!在纯SQL中,我可以轻松地做到:

select name, sum(id) from user group by name

然而,在端点内部,执行查询的推荐方法(再次参见此处)是从引用到域对象 User 开始,例如:

User.query.filter(User.name == 'admin').first()

要执行分组查询,我宁愿使用这样的东西(确实有效!

#see database module http://flask.pocoo.org/docs/0.12/patterns/sqlalchemy/#declarative)
from database import db_session 
 @app.route('/')
 def index():
     db_session.query(func.sum(User.id).label('num_id'), User.name).group_by(User.name).all()

在这种情况下,查询从db_session开始。这是正确和安全的吗?Remeamber 我们在 Flask 内部的并发应用程序中。

有什么帮助吗?

> 没关系。但我通常在这种情况下使用 .with_entities(*实体):

User.query.filter(filters).with_entities(User.name.label('name'), func.count(User.id).label('count')).group_by(User.name)

最新更新