SQLAlchemy 来查询并统计 MySQL 中 JSON 字段的一个值

在使用 SQLAlchemy 来查询并统计 MySQL 中 JSON 字段的一个值时,你可以结合 SQLAlchemy 的 func 模块来实现 SQL 函数的调用,比如 JSON_EXTRACT,并使用 group_by 和 count 方法来进行分组统计。下面是如何在 SQLAlchemy 中实现这一点的基本步骤。

首先,确保你已经安装了 SQLAlchemy。如果还没有安装,可以通过 pip 安装:

复制代码
pip install SQLAlchemy 

然后,你可以按照以下步骤在你的代码中实现查询和统计:

  1. 连接到数据库:首先,创建一个数据库引擎来管理连接。

  2. 定义模型:定义一个模型来映射到数据库中的表。

  3. 查询和统计:使用 SQLAlchemy 的查询接口和函数来提取 JSON 字段的值,并按这个值进行分组统计。

假设我们有一个名为 users 的表,其中有一个名为 attributes 的 JSON 类型字段,我们想要按照 attributes 字段中 status 的值进行分组统计。

复制代码
from sqlalchemy import create_engine, Column, Integer, String, JSON, func
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# 定义基类
Base = declarative_base()

# 定义模型
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    attributes = Column(JSON)

# 创建数据库连接(替换为你的数据库连接字符串)
engine = create_engine('mysql+pymysql://user:password@localhost/mydatabase')
Session = sessionmaker(bind=engine)
session = Session()

# 执行查询和统计
results = session.query(
    func.json_unquote(func.json_extract(User.attributes, '$.status')).label('status'),
    func.count().label('count')
).group_by('status').all()

# 打印结果
for status, count in results:
    print(f'Status: {status}, Count: {count}')
复制代码
在这个示例中:
  • 我们使用 json_extract 函数来提取 attributes JSON 字段中的 status 值,并使用 json_unquote 来去除结果字符串的引号。
  • 使用 func.count() 来统计每个状态值出现的次数,并通过 group_by 方法按照状态值进行分组。
  • all() 方法用于执行查询,并获取所有结果。
相关推荐
꯭自꯭闭꯭8 小时前
DM7主备升级方案
linux·服务器·数据库
蜗牛互联网9 小时前
MongoDB Atlas Agent Engine之后,如何用版本门禁防止陈旧写入
java·数据库·人工智能·后端·mongodb
IvorySQL9 小时前
PostgreSQL 日报 |PostgreSQL 19 Beta 4 发布(9 月 25 日)
数据库·postgresql
科技研学社9 小时前
绿色合规时代,碳足迹与ESG倒逼服装工厂工序升级
数据库·人工智能
赵渝强老师10 小时前
【赵渝强老师】崖山数据库的数据库文件
数据库·国产数据库·yashandb·崖山数据库
做运维的阿瑞10 小时前
多表查询基础:INNER JOIN、LEFT JOIN、RIGHT JOIN
数据库·sql·mysql·算法
IvorySQL10 小时前
PostgreSQL 日报 | 可见性映射数据损坏修复(9 月 26 日)
数据库·postgresql
Seraphina3611 小时前
DVWA(SQL注入-low,medium,XSS反射-low)
前端·数据库·笔记·sql·网络安全·web·xss
CHEEVEN_QY11 小时前
搅拌摩擦焊FSW工艺参数对焊缝成形影响的实验研究10.1
linux·服务器·数据库
帷幕落秋11 小时前
Redis哨兵模式
运维·数据库