【问题标题】:How to implement sqlalchemy aggregate functions in flask datatables (Server Side)?如何在烧瓶数据表(服务器端)中实现 sqlalchemy 聚合函数?
【发布时间】:2017-09-29 19:38:33
【问题描述】:

我正在使用 SqlAlchemy-Datatables 来实现服务器端数据表。

我无法在服务器端为 sqlalchemy 数据表定义 ColumnsDT 和查询聚合函数,例如 sum、count 等。我试过了

columns = [
    ColumnDT(Timepass.user_name),
    ColumnDT(func.sum(Timepass.income).label('Sum'))
]
results = db.session.query(Timepass.user_name, func.sum(Timepass.income).label('Sum')).group_by(Timepass.user_name)
params = request.args.to_dict()
rowTable = DataTables(params, results, columns)
return jsonify(rowTable.output_result())

我收到以下错误:DataTables 警告:table id=example - (psycopg2.ProgrammingError) 在 WHERE 中不允许使用聚合函数 第 4 行:...ST(timepass.user_name AS TEXT) ILIKE '%%' OR CAST(sum(timepa...

【问题讨论】:

    标签: python flask datatables flask-sqlalchemy server-side


    【解决方案1】:

    https://github.com/Pegase745/sqlalchemy-datatables/issues/93 获得帮助。这里要注意的关键是 global_search = False 参数。如果不使用,它会在 where 子句中抛出错误,说聚合函数不能在 Where 子句中使用..

    columns = [
        ColumnDT(Timepass.user_name),
        ColumnDT(func.sum(Timepass.income).label('Sum'), global_search=False),
        ColumnDT(func.count(Timepass.user_name).label('Count'), global_search=False)
    ]
    query = session.query(Timepass.user_name, func.sum(Timepass.income).label('Sum'),
                          func.count(Timepass.user_name).label('Count')).group_by(Timepass.user_name)
    
    params = request.args.to_dict()
    
    rowTable = DataTables(params, query, columns)
    
    return jsonify(rowTable.output_result())
    

    【讨论】:

      猜你喜欢
      • 2017-07-16
      • 1970-01-01
      • 2019-01-26
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-26
      • 1970-01-01
      相关资源
      最近更新 更多