Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 烧瓶+;sqlAlchemy计数、平均值和一次查询中的总和_Python_Postgresql_Flask_Sqlalchemy - Fatal编程技术网

Python 烧瓶+;sqlAlchemy计数、平均值和一次查询中的总和

Python 烧瓶+;sqlAlchemy计数、平均值和一次查询中的总和,python,postgresql,flask,sqlalchemy,Python,Postgresql,Flask,Sqlalchemy,检查了sqlAlchemy文档,但看不到使用过滤器和FUNC进行多列查询的示例。 如何基于我的模型组合查询以返回如下结果: SELECT COUNT(amount)a_cnt, SUM(amount)a_sum, AVG(amount)a_avg FROM public.transaction WHERE acc_id = 1 AND "traDate" >= '2019-11-20' AND "traDate" <= '2019-12-01

检查了
sqlAlchemy
文档,但看不到使用过滤器和FUNC进行多列查询的示例。 如何基于我的模型组合查询以返回如下结果:

SELECT 
COUNT(amount)a_cnt,
SUM(amount)a_sum,
AVG(amount)a_avg
FROM public.transaction
WHERE acc_id = 1
AND "traDate" >= '2019-11-20'
AND "traDate" <= '2019-12-01'

******************
a_cnt || a_sum || a_avg
------------------------
3     || 12    || 4
html:

。。。
总计{总计}
总计{Total\u amnt.a\u sum}
...      
我遗漏了什么?

找到了这个。如果没有更好的答案,我会接受的

def sum_filtered(account_id, date_from, date_to):
    result = db.session.execute('SELECT COUNT(amount)a_cnt, AVG(amount)a_avg, SUM(amount)a_sum FROM transaction WHERE acc_id = :p1 AND "traDate" BETWEEN :p2 AND :p3',{'p1' : account_id, 'p2' : date_from, 'p3' : date_to})
    return result.fetchone()
应用程序:

然后是html:

{{ sum_avg_cnt.a_cnt }}

如果您没有得到SQLAlchemyError,那么请检查您得到的查询语法是否确实与您想要的SQL查询对应。我猜你的过滤器不正确。您正在使用
filter\u by
filter
,我不知道这是怎么回事,但它可能会产生一个比您预期的更严格的WHERE子句。我确实在另一个查询中使用了这两个子句,它工作正常。我已经删除了整个.filter()和.filter\u by(),但仍然是相同的错误
total\u amnt.c.a\u sum
给了你什么吗?没有,这两个函数
db.session…
Transaction.query…
都返回相同的jinja错误
jinja2.exceptions.UndefinedError:“flask\u sqlalchemy.BaseQuery对象”没有属性“c”
您正在将查询本身传递给模板,并且从未使用例如
query.one\u或\u none()实际运行它。
...
<span class="input-group-text">Total £{{ total_amnt }}</span><!-- shows the query syntax-->
<span class="input-group-text">Total £{{ total_amnt.a_sum }}</span><!-- shows nothing-->
...      
def sum_filtered(account_id, date_from, date_to):
    result = db.session.execute('SELECT COUNT(amount)a_cnt, AVG(amount)a_avg, SUM(amount)a_sum FROM transaction WHERE acc_id = :p1 AND "traDate" BETWEEN :p2 AND :p3',{'p1' : account_id, 'p2' : date_from, 'p3' : date_to})
    return result.fetchone()
        'sum_avg_cnt' : model.Transaction.sum_filtered(accountid, f_from, f_to),
{{ sum_avg_cnt.a_cnt }}