【问题标题】:How to include both SUM, COUNT in SELECT statement in a single line in flask-sqlalchemy如何在flask-sqlalchemy的一行中同时包含SELECT语句中的SUM、COUNT
【发布时间】:2019-01-22 15:32:24
【问题描述】:

我对编程世界很陌生。最近,我一直在尝试将python 3.6中的sqlite代码重写为flask-sqlalchemy,我想知道如何在flask-sqlalchemy中重写以下代码在单个语句中 并将选定的值传递给单个变量,就像在代码中一样:

rows = db.execute("SELECT SUM(student_total) AS stdtotal, SUM(payment_total) AS paytotal, COUNT(identifier) AS clstotal FROM 类 WHERE admin_id = :admID", admID=session["user_id"])

我已阅读:http://wiki.workassis.com/sum-avg-count-max-group_by-distinct-sqlalchemy/ 但我需要从 sqlalchemy 导入 func,如果可能的话,我希望避免这样做。

非常感谢您。

【问题讨论】:

  • 为什么要避免导入func?另一方面,它在 Flask-SQLAlchemy 中也可以作为 db.func 使用。
  • @Ilja Everilä 如果这是处理此问题的最有效方法,那么我不会抱怨使用它。坦率地说,我对使用它感到有些不知所措。
  • 将生成的 SQL 表达式对象编译为 SQL 字符串所花费的时间可以忽略不计。我想您可能会认为它做了其他事情,或者您在总体上对聚合/汇总查询有所不同?
  • @Ilja Everilä 谢谢。我现在不再逃避它了。

标签: python sqlalchemy flask-sqlalchemy


【解决方案1】:

感谢 Ilja Everilä 的评论和一些进一步的阅读,我已经解决了。我尝试使用 func 库并且它有效。我想我不可能避免使用 func。对于flask-sqlalchemy的新用户,以后可能遇到和我一样的问题,我把自己想出的解决办法写出来:

注意:此方案需要从sqlalchemy.sql

导入label

rows = db.session.query(label('stdtotal', db.func.sum(classes.student_total)), label('paytotal', db.func.sum(classes.payment_total)), label(' clstotal', db.func.count(classes.identifier))).filter_by(admin_id=session["user_id"])

**请注意,上述查询的返回值类型与sqlite SELECT语句的类型不同。对于 sqlite,返回值是一个字典,但对于 flask-sqlalchemy,返回值是一个对象。 (见http://docs.sqlalchemy.org/en/latest/orm/query.html

【讨论】:

    猜你喜欢
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多