Передать результат в шаблон в зависимости от значения func.sum () в колбе SQLAlchemy - PullRequest
0 голосов
/ 11 октября 2018

Я делаю некоторые вычисления в моем файле rout.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, выведите «что-то еще».

Я не могу найти решение своей проблемы.Любые советы о том, как это можно решить?

1 Ответ

0 голосов
/ 12 октября 2018

Sqlalchemy ORM упаковывает мощные API-выражения выражений, которые можно использовать для запросов типа
, описанных в вашем вопросе.

Для вашего случая использования результирующий запрос будет иметь вид:

SELECT field1, field2, ...
CASE
WHEN (сумма ( field1 )> =: param_1 AND sum ( field1 )<=: param_2) THEN: param_3 <br>WHEN (сумма ( field1 )> =: param_4 AND sum ( field1 ) <=: param_5) THEN: param_6 <br>ENDAS псевдоним
FROM таблица
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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...