Skip to content
标题:Agents 开发代码释疑
发布日期:2026/01/25
标签:
Agents

SQLAlchemy

  • SQLAlchemy = SQL + Alchemy,整体寓意是“用炼金术般的方式处理 SQL”,即通过高级抽象(如 ORM)让数据库操作变得更简单、优雅和强大。
  • Alchemy,意为炼金术,发音接近艾尔可米
  • SQLAlchemy 是 Python 中一个功能强大且广泛使用的 ORM(对象关系映射,Object-Relational Mapping)库,用于在 Python 代码中操作关系型数据库(如 PostgreSQL、MySQL、SQLite、Oracle 等),而无需直接编写原始 SQL 语句。

1. ORM 层(高级 API)

  • 将数据库表映射为 Python 类(称为“模型”)。

  • 表中的每一行记录对应一个类的实例。

  • 通过操作对象来完成增删改查,例如:

    python
    user = User(name="张三", email="zhangsan@example.com")
    session.add(user)
    session.commit()
  • 自动处理 SQL 生成、参数绑定、事务管理等。

2. Core 层(低级 API)

  • 提供更接近 SQL 的表达式语言(SQL Expression Language)。
  • 允许构建类型安全、可组合的 SQL 查询,但比原生 SQL 更具可读性和可移植性。
  • 适合需要精细控制查询性能或复杂 SQL 的场景。

3. 数据库无关性

  • 支持多种数据库后端,切换数据库通常只需更改连接字符串。
  • 自动生成符合目标数据库语法的 SQL。

4. 与 Web 框架集成良好

  • 常与 FastAPI、Flask、Django(通过扩展)等框架配合使用。
  • 在 FastAPI 项目中,常结合 pydantic 模型与 SQLAlchemy 模型实现请求验证与数据持久化分离。

与 Hibernate 对比

  • SQLAlchemy 和 Hibernate 在功能定位上非常相似,都是各自语言生态中主流的 ORM(对象关系映射)框架。它们都允许开发者用面向对象的方式操作关系型数据库,避免直接写大量 SQL,同时提供缓存、事务管理、懒加载、关联映射等高级功能。

    • SQLAlchemy 是 Python 的 ORM 工具;
    • Hibernate 是 Java 的 ORM 框架(后来成为 JPA 规范的事实参考实现)。
  • 二者没有直接关联,但可以说 SQLAlchemy 在某种程度上受到了 Hibernate 等早期 ORM 的启发,但它是独立实现的,并发展出了自己独特的架构(如 Core + ORM 双层设计)。

  • 二者设计理念不同(Hibernate 更“约定优于配置”,SQLAlchemy 更偏向“显式优于隐式”)。


显式优于隐式

代码的行为应该清晰、直接地表达出来,而不是依赖隐藏的规则、魔法般的自动推断或难以察觉的副作用。

  • Explicit is better than implicit,是 Python 语言设计哲学的核心原则之一,出自《Python 之禅》(The Zen of Python),由 Tim Peters 撰写。你可以在 Python 中运行 import this 查看全文。

普通代码中示例

  • ❌ 隐式(不推荐)
python
# 假设有一个函数,它偷偷修改了全局变量
def add_item(item):
    global items
    items.append(item)  # 但函数签名没体现这一点!

add_item("apple")
# 你不知道 `items` 被改了,除非去看函数内部
  • ✅ 显式(推荐)
python
def add_item(items, item):
    return items + [item]  # 或者明确传入并修改

my_list = []
my_list = add_item(my_list, "apple")  # 清楚知道 my_list 被更新了

SQLAlchemy 中代码示例

  • ❌ 隐式风格(类似某些 ORM 的“魔法”)
python
# 某些框架可能这样:保存对象时自动触发数据库操作
user.name = "张三"
# 然后……突然就存进数据库了?什么时候 commit 的?
  • ✅ SQLAlchemy 的显式风格
python
user.name = "张三"
session.add(user)
session.commit()  # 明确告诉程序:“现在提交到数据库”
  • SQLAlchemy 不会偷偷帮你提交事务或自动同步对象状态(除非你主动配置),所有关键操作都需要你明确写出,这就是“显式优于隐式”的体现。

显式优于隐式的优点

  • 可读性:别人(或未来的你)能快速理解代码做了什么。
  • 可维护性:减少“魔法”带来的意外行为(比如你以为没保存,结果自动保存了)。
  • 调试友好:错误更容易定位,因为每一步都是可见的。

pandas

  • pandas 是 Python 中一个非常强大且广泛使用的数据处理与分析库

  • pandas 的设计目标是为 Python 提供类似 电子表格(如 Excel)或数据库表 的结构化数据操作能力,特别适合用于:

    • 数据清洗
    • 数据探索(EDA)
    • 数据转换
    • 时间序列分析
    • 统计分析
  • 它的两个核心数据结构是:

    1. Series:一维带标签的数组(类似单列数据)
    2. DataFrame:二维表格型数据结构(类似 Excel 表或 SQL 表)

为什么 pandas 能“执行 SQL”?

pandas 本身不直接执行 SQL 语句,但它提供了类似 SQL 的操作方式,比如:

SQL 操作pandas 等价操作
SELECTdf[['col1', 'col2']]
WHEREdf[df['age'] > 30]
GROUP BYdf.groupby('category').sum()
JOINpd.merge(df1, df2, on='id')
ORDER BYdf.sort_values('name')

此外,pandas 还支持通过 pd.read_sql() 从数据库(如 SQLite、MySQL、PostgreSQL)中直接读取 SQL 查询结果,但这需要配合数据库连接(如 sqlite3SQLAlchemy),并不是 pandas 自己在“执行 SQL”,而是调用数据库引擎执行后把结果转成 DataFrame


pandas 的主要功能概览

  1. 数据读写

    • 支持格式:CSV、Excel、JSON、HTML、Parquet、SQL、HDF5 等
    • 示例:pd.read_csv('file.csv'), df.to_excel('output.xlsx')
  2. 数据清洗

    • 处理缺失值(dropna(), fillna()
    • 去重(drop_duplicates()
    • 类型转换(astype()
    • 字符串处理(str.contains(), str.replace()
  3. 数据筛选与索引

    • 条件筛选、布尔索引
    • loc / iloc 精准定位行/列
  4. 分组聚合(GroupBy)

    • 类似 SQL 的 GROUP BY + 聚合函数(sum, mean, count 等)
  5. 合并与连接

    • concat(), merge(), join() 实现表连接
  6. 时间序列支持

    • 日期解析、重采样(resample)、移动窗口(rolling
  7. 统计与描述

    • describe(), corr(), value_counts() 等快速统计
  8. 可视化(基础)

    • 内置基于 Matplotlib 的绘图:df.plot(), df.hist()

Gradio

  • Gradio 是一个开源的 Python 库,旨在帮助开发者、数据科学家和机器学习工程师快速构建交互式 Web 界面,用于演示机器学习模型、API 或任意 Python 函数 。

  • 它的主要特点:

    • 简单易用:只需几行代码即可为模型或函数创建图形用户界面(GUI),无需前端开发经验 。
    • 快速原型:非常适合快速搭建 AI 模型的演示界面,便于在团队内部或对外展示时进行交互测试 。
    • 广泛支持输入/输出组件:提供图像、文本、音频、视频、文件上传等多种 UI 组件,可灵活适配不同任务需求 。
    • 本地与云端部署:既可以在本地运行,也支持一键部署到 Hugging Face Spaces 等平台,实现公开分享 。
    • 与主流框架兼容:无缝集成 PyTorch、TensorFlow、scikit-learn、OpenCV、Transformers 等常用库 。

mysql-connector-python

Python 中用于连接 MySQL 的官方驱动并不是叫mysql,而是mysql-connector-pythonPyMySQL

  • pip install mysql安装的是一个早已废弃、不维护的老包(甚至可能根本安装失败),它不能提供 mysql.connector 模块,也不能连接 MySQL 数据库。
  • pip install mysql-connector-python安装的是 MySQL 官方推荐的驱动,它提供了 mysql.connector 模块,用于连接 MySQL 数据库。
  • pip install PyMySQL安装的是另一个常用的 MySQL 驱动,它也提供了 mysql.connector 模块,用于连接 MySQL 数据库。
  • 这两个驱动的主要区别在于:
    • mysql-connector-python 是 MySQL 官方推荐的驱动,功能完善,性能稳定。
    • PyMySQL 是一个纯 Python 实现的驱动,功能与 mysql-connector-python 类似,但可能在某些场景下性能稍差。
    • 如果代码用的是 mysql+mysqlconnector://user:password@host/db,就必须用 mysql-connector-python
    • 如果代码用的是 mysql+pymysql://user:password@host/db,就必须用 PyMySQL

tabulate

  • tabulate 是一个 Python 第三方库,用于将 表格数据(如列表、字典、Pandas DataFrame 等)以美观、对齐的文本形式打印出来,常用于命令行工具、日志输出或调试时展示结构化数据。

  • 比如你有如下数据

    python
    data = [
        ["Alice", 25, "Engineer"],
        ["Bob", 30, "Designer"]
    ]
    headers = ["Name", "Age", "Job"]

使用 tabulate 可以输出成这样:

markdown
Name    Age  Job
------  ---  --------
Alice    25  Engineer
Bob      30  Designer
  • 支持多种格式:plain, grid, pipe(Markdown 表格), html, psql, jira 等。

if __name__ == '__main__':

  • 这行代码是 Python 中的一个条件判断语句,用于 判断当前模块是否作为主程序直接运行 ,而不是被其他模块导入。具体来说:
    • __name__ 是 Python 模块的内置变量,表示当前模块的名称
    • 当模块被直接运行时, __name__ 的值会被设置为 __main__
    • 当模块被其他模块导入时, __name__ 的值会是模块的实际名称(即文件名,不含.py后缀,如文件名是 my_module.py,则 __name__ 的值为 my_module
    • 因此, if __name__ == '__main__': 条件成立时,执行其下方的代码块

基于 MIT 许可发布。