Python Flask sqlalchemy - сумма столбцов по дате - PullRequest
0 голосов
/ 10 октября 2019

У меня есть таблица

class NutritionConsumed(db.Model):
    __tablename__ = 'nutritionconsumed'
    id = db.Column(db.Integer, primary_key=True)
    date = db.Column(db.DateTime, nullable=False )
    calories = db.Column(db.Float, nullable=False)
    totalfat = db.Column(db.Float, nullable=False)

, и я хочу суммировать столбцы «калории» и «общий жир» по «дате»

, поэтому я пытаюсь

@app.route('/nutritiontotals')
def nutritiontotals():
    nutritiontotals = NutritionConsumed.query.filter_by(func.sum(NutritionConsumed.calories), 
                                                        func.sum(NutritionConsumed.totalfat),
                                                        ).group_by(NutritionConsumed.date).all()
    return render_template('nutritiontotals.html', nutritiontotals=nutritiontotals)

но я получаю ошибку

TypeError: filter_by() takes 1 positional argument but 3 were given

1 Ответ

0 голосов
/ 11 октября 2019

В ваш запрос вы включаете func.sum в часть фильтра запроса. Похоже, вы хотите вернуть это значение вместо фильтрации по нему.

Если да, то вместо синтаксиса ModelClass.query, который обеспечивает flask_sqlalchemy, я бы порекомендовал структурировать ваш запрос с использованием db.session. Синтаксис .query (query_args) .filter (filter_args), который SQLAlchemy использует в своей документации. https://docs.sqlalchemy.org/en/13/orm/tutorial.html#querying

Используя синтаксис db.session.query (), вы можете включить несколько разделов или столбцов в раздел запроса (при условии, что у вас есть соответствующие объединения).

Не провереноэто, но это должно работать.

 q = db.session.query(NutritionConsumed.date, 
                      func.sum(NutritionConsumed.calories),               
                      func.sum(NutritionConsumed.totalfat))\
               .group_by(NutritionConsumed.date).all()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...