我在Flask项目中使用sqlalchemy ORM和声明扩展来获取Web API。 Flask文档显示了如何在端点here
内正确执行查询现在这一切都很好,但是如果我想通过查询执行一个组会怎么样呢。例如,给出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
然而,在端点内部,执行查询的重新思考方式(再次see here)是从ref开始到域对象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开始。 这是正确和安全的吗?记住我们在Flask中的并发应用程序。
任何帮助?
答案 0 :(得分:0)
没关系。 但我经常使用。with_entities(*entities)来处理这种情况:
User.query.filter(filters).with_entities(User.name.label('name'), func.count(User.id).label('count')).group_by(User.name)