我正在route.py文件中进行一些计算。使用下面的代码,我可以将计算结果传递到模板中。
**(my routes.py)**
@app.route('/sum')
def sum():
tups = db.session.query(Mat2.elev.label("elevnavn"), db.func.sum(Mat2.a
+ Mat2.b + Mat2.c + Mat2.d + Mat2.e).label("csum")).group_by(Mat2.id).all()
return render_template('sum.html', tups=tups)
**(my template)**
<html>
<head>
<title>Sum</title>
</head>
<body>
{% for i in tups %}
<p>{{ i.csum }}</p><br>
{% endfor %}
</body>
我一直在尝试根据计算值将不同的字符串传递给模板。像...
如果csum值介于0到100之间,则显示“内容”
如果csum的值在101到150之间,则显示“其他”。
我似乎找不到解决我问题的方法。有什么技巧可以解决吗?
答案 0 :(得分:0)
Sqlalchemy ORM包含功能强大的表达式API,可用于问题中所述的类型
的查询。
对于您的用例,结果查询将为:
选择 field1,field2,...
案例
当(sum( field1 )> =:param_1 AND sum( field1 )<=:param_2)然后:param_3
当(sum( field1 )> =:param_4 AND sum( field1 )<=:param_5)然后:param_6
END AS 别名
从表
GROUP BY field2
可以使用sqlalchemy.sql.expression.case
生成CASE
表达式来类似地编写。
from sqlalchemy.sql.expression import case, and_
elevnavn = Mat2.elev.label("elevnavn")
csum = db.func.sum(Mat2.a + Mat2.b + Mat2.c + Mat2.d + Mat2.e)
from_0_to_100 = and_(csum >= 0, csum <= 100)
from_101_to_150 = and_(csum >= 101, csum <= 150)
csum_cases = case([
(from_0_to_100, "something"),
(from_101_to_150, "something else")
]).label("csum")
tups = db.session.query(elevnavn, csum_cases).group_by(Mat2.id).all()