如何在 SQLAlchemy 查询中使用 avg 和 sum?
在本文中,我们将了解如何使用Python在 SQLAlchemy 查询中使用 avg 和 sum。
安装 SQLAlchemy
SQLAlchemy 可通过 pip install 包获得。
pip install sqlalchemy
但是,如果您使用的是烧瓶,您可以使用它自己的 SQLAlchemy 实现。它可以安装使用 -
pip install flask-sqlalchemy
例子
在我们继续之前,我们需要有一个数据库和一个表来使用。对于此示例,我们使用 MySQL 数据库并创建了一个学生表。该表有 3 列和 6 条记录,如下所示。
在表中,我们有一个浮点列“百分比”,我们将使用 SQLAlchemy 对其执行平均和求和操作。
方法:
- 首先,为简单起见,我们将 sqlalchemy 库导入为db 。所有 sqlalchemy 对象、方法等都将使用db前缀导入,以提高清晰度。
- 然后我们创建引擎,它将作为与数据库的连接来执行所有数据库操作。
- 创建元数据对象。元数据对象“元数据”包含有关我们数据库的所有信息。
- 使用元数据信息从数据库中获取学生表。
- 我们现在可以编写一个 SQLAlchemy 查询来获取所需的记录。我们首先使用 SQLalchemy 的func.avg()函数提取百分比列的平均值。然后我们使用func.sum()函数来获取百分比列中值的总和。请注意,在这两种情况下,我们都使用了func.round(val, 2)方法将值四舍五入到小数点后 2 位。
- 打印输出。在输出中,我们可以看到我们有百分比字段的总和值和平均值。
下面是实现:
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])
输出: