📜  Python SQLAlchemy – Group_by 并返回最大日期

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

Python SQLAlchemy – Group_by 并返回最大日期

在本文中,我们将了解如何使用 Group_by 并在Python中返回最大日期 SQLAlchemy。

安装 SQLAlchemy

SQLAlchemy 可通过 pip install 包获得。

pip install sqlalchemy

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

pip install flask-sqlalchemy

例子

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

用户表 – mySQL

在上表中,我们可以看到有 3 个不同的用户,即 John、Emma 和 Liam。我们将根据他们的first_namelast_name进行 GROUP BY。该表有一个created_on字段,它是一个 TIMESTAMP 数据类型。它将用于选择不同用户的最大日期。

方法:

  1. 首先,为简单起见,我们将 sqlalchemy 库导入为db 。所有 sqlalchemy 对象、方法等都将使用 db 前缀导入,以提高清晰度。
  2. 然后我们创建引擎,它将作为与数据库的连接来执行所有数据库操作。
  3. 创建元数据对象。元数据对象 ` metadata`包含有关我们数据库的所有信息。
  4. 使用元数据信息从数据库中获取用户表。
  5. 我们现在可以编写一个 SQLAlchemy 查询来获取所需的记录。我们对first_namelast_name字段执行 GROUP BY 操作,并在 SELECT 查询中使用 SQLalchemy 的func.max()函数检索最大日期。
  6. 打印所有获取的记录。在输出中,我们可以看到我们只有 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)


输出: