Python SQLAlchemy – Group_by 并返回最大日期
在本文中,我们将了解如何使用 Group_by 并在Python中返回最大日期 SQLAlchemy。
安装 SQLAlchemy
SQLAlchemy 可通过 pip install 包获得。
pip install sqlalchemy
但是,如果您使用的是烧瓶,您可以使用它自己的 SQLAlchemy 实现。它可以安装使用 -
pip install flask-sqlalchemy
例子
在我们继续之前,我们需要有一个数据库和一个表来使用。对于此示例,我们使用 mySQL 数据库并创建了一个用户表。该表有 6 列和 7 条记录,如下所示。
在上表中,我们可以看到有 3 个不同的用户,即 John、Emma 和 Liam。我们将根据他们的first_name和last_name进行 GROUP BY。该表有一个created_on字段,它是一个 TIMESTAMP 数据类型。它将用于选择不同用户的最大日期。
方法:
- 首先,为简单起见,我们将 sqlalchemy 库导入为db 。所有 sqlalchemy 对象、方法等都将使用 db 前缀导入,以提高清晰度。
- 然后我们创建引擎,它将作为与数据库的连接来执行所有数据库操作。
- 创建元数据对象。元数据对象 ` metadata`包含有关我们数据库的所有信息。
- 使用元数据信息从数据库中获取用户表。
- 我们现在可以编写一个 SQLAlchemy 查询来获取所需的记录。我们对first_name和last_name字段执行 GROUP BY 操作,并在 SELECT 查询中使用 SQLalchemy 的func.max()函数检索最大日期。
- 打印所有获取的记录。在输出中,我们可以看到我们只有 3 个不同的用户,所有用户的相应updated_on字段是我们在表条目中拥有的最大日期。
下面是实现:
Python
import sqlalchemy as db
from sqlalchemy.engine import result
# 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 `users` table from the Metadata object
USERS = meta_data.tables['users']
# SQLAlchemy Query to GROUP BY and fetch MAX date
query = db.select([
USERS.c.email,
USERS.c.first_name,
USERS.c.last_name,
db.func.max(USERS.c.created_on)
]).group_by(USERS.c.first_name, USERS.c.last_name)
# Fetch all the records
result = engine.execute(query).fetchall()
# View the records
for record in result:
print("\n", record)
输出: