📜  如何在 SQLAlchemy 查询中使用 avg 和 sum?

📅  最后修改于: 2022-05-13 01:54:41.166000             🧑  作者: Mango

如何在 SQLAlchemy 查询中使用 avg 和 sum?

在本文中,我们将了解如何使用Python在 SQLAlchemy 查询中使用 avg 和 sum。

安装 SQLAlchemy

SQLAlchemy 可通过 pip install 包获得。

pip install sqlalchemy

但是,如果您使用的是烧瓶,您可以使用它自己的 SQLAlchemy 实现。它可以安装使用 -

pip install flask-sqlalchemy

例子

在我们继续之前,我们需要有一个数据库和一个表来使用。对于此示例,我们使用 MySQL 数据库并创建了一个学生表。该表有 3 列和 6 条记录,如下所示。

在表中,我们有一个浮点列“百分比”,我们将使用 SQLAlchemy 对其执行平均和求和操作。

方法:

  1. 首先,为简单起见,我们将 sqlalchemy 库导入为db 。所有 sqlalchemy 对象、方法等都将使用db前缀导入,以提高清晰度。
  2. 然后我们创建引擎,它将作为与数据库的连接来执行所有数据库操作。
  3. 创建元数据对象。元数据对象“元数据”包含有关我们数据库的所有信息。
  4. 使用元数据信息从数据库中获取学生表。
  5. 我们现在可以编写一个 SQLAlchemy 查询来获取所需的记录。我们首先使用 SQLalchemy 的func.avg()函数提取百分比列的平均值。然后我们使用func.sum()函数来获取百分比列中值的总和。请注意,在这两种情况下,我们都使用了func.round(val, 2)方法将值四舍五入到小数点后 2 位。
  6. 打印输出。在输出中,我们可以看到我们有百分比字段的总和值和平均值。

下面是实现:

Python
import sqlalchemy as db
  
# Define the Engine (Connection Object)
engine = db.create_engine(
    "mysql+pymysql://root:password@localhost/Geeks4Geeks")
  
# Create the Metadata Object
meta_data = db.MetaData(bind=engine)
db.MetaData.reflect(meta_data)
  
# Get the `students` table from the Metadata object
STUDENTS = meta_data.tables['students']
  
# SQLAlchemy Query to get AVG
query = db.select([db.func.round(db.func.avg(STUDENTS.c.percentage), 2)])
  
# Fetch the records
avg_result = engine.execute(query).fetchall()
  
# SQLAlchemy Query to get SUM
query = db.select([db.func.round(db.func.sum(STUDENTS.c.percentage), 2)])
  
# Fetch the records
sum_result = engine.execute(query).fetchall()
  
# View the records
print("\nAverage: ", avg_result[0])
print("\nSum: ", sum_result[0])


输出: