SQLAlchemy 架构 — 初学者学习后端的笔记

发布: (2026年1月17日 GMT+8 15:17)
6 min read
原文: Dev.to

Source: Dev.to

请提供您希望翻译的正文内容,我将为您翻译成简体中文,并保留原有的格式、Markdown 语法以及代码块和 URL。

什么是 SQLAlchemy(简明版)

SQLAlchemy 是一个用于操作关系型数据库的 Python 库。

起初,我以为 ORM 意味着“没有 SQL”。SQLAlchemy 证明了这个想法是错误的。

使用 SQLAlchemy:

  • SQL 仍然重要
  • 表和关系仍然重要
  • Python 对象是可选的,而非强制的

它并不隐藏数据库,而是小心地将其暴露出来。

“数据库抽象”的真实问题

许多工具试图让数据库变得不可见:

  • 没有 SQL
  • 没有模式(schema)思考
  • 看不到连接(joins)或约束

这种感觉很舒适,却违背了现实。

关系型数据库之所以强大,是因为它们严格:

  • 模式的存在是有原因的
  • 关系是显式的
  • SQL 有规则

对象追求灵活性,数据库要求准确性。这种冲突始终存在。

SQLAlchemy 并不试图逃避这种冲突。

SQLAlchemy的核心哲学

SQLAlchemy 并不试图保护开发者免受数据库的影响。

它的理念:

  • 必须理解关系
  • 必须看到 SQL
  • 自动化应当减少重复,而不是减少思考

这就是为什么 SQLAlchemy 称自己为 toolkit,而不是框架。

它允许抽象泄漏:

  • 你可以看到正在发生的事情
  • 你可以控制行为
  • 没有任何强制或隐藏

Core vs ORM(这花了点时间才明白)

SQLAlchemy 被划分为两层。

Core

Core 是基础层。它负责:

  • 数据库驱动通信
  • SQL 构造
  • 表和列的定义
  • 连接与执行

重要要点:

  • Core 可以单独使用,不依赖 ORM
  • Core 与 SQL 紧密贴合
  • Core 始终可用

这消除了我对 “SQLAlchemy 等同于 ORM” 的误解。

ORM

ORM 构建在 Core 之上。它增加了:

  • 将 Python 类映射到表
  • 身份追踪
  • 更改追踪与持久化

核心理念:

  • ORM 是可选的
  • ORM 永远不会阻断对 Core 的访问
  • 你可以随时回退到底层

这种分离让人感觉更为诚实。

设计成本

因为一切都是分层的:

  • 发生了许多函数调用
  • Python 函数调用很慢

SQLAlchemy 通过以下方式减少这些:

  • 优化热点路径
  • 内联逻辑
  • 在需要时使用 C 扩展

设计保持简洁,而不是被重写为低层代码。

为什么仅仅使用 DBAPI 不够

DBAPI 只是一套宽松的规范。不同的驱动行为各不相同:

  • Unicode 处理方式不同
  • Binary 处理方式不同
  • 参数风格不同
  • 获取最后插入的 ID 方式不同

这种不一致是危险的。SQLAlchemy 的存在就是为了统一这些差异。

引擎、连接、结果(思维模型)

SQLAlchemy 将原始数据库访问封装成清晰的层次。

  • Engine – 入口点。了解使用哪个数据库和驱动程序。
  • Connection – 代表一个实际的数据库连接。
  • Result – 整洁地封装返回的行和元数据。

直接使用 DBAPI 的情况消失了。

方言(关键概念)

方言定义了:

  • SQL 在特定数据库中的写法
  • 驱动程序特定的行为
  • 类型转换
  • 参数格式化

每个方言针对:

  • 一个数据库
  • 一个驱动程序

这解释了 SQLAlchemy 如何干净利落地支持多种数据库。

ExecutionContext

每次查询运行时:

  • 创建一个短暂的执行对象
  • 在那里处理运行时细节
  • 将 SQL、参数和结果关联起来

方言定义规则;ExecutionContext 在运行时应用这些规则。

处理支持多种数据库的驱动程序

一些驱动程序可以与多种数据库通信。SQLAlchemy 通过以下方式处理:

  • 共享通用行为
  • 仅在需要时添加特定数据库的逻辑

没有重复。没有猜测。

最终理解

我学到的最重要的一点:

关系型数据库本质上是严格的。SQLAlchemy 并不假装相反。

相反,它:

  • 使规则可见
  • 自动化重复性工作
  • 将控制权交给开发者
  • 能够平滑地从原始 SQL 扩展到 ORM

这种设计感觉真实,而非魔法。

Back to Blog

相关文章

阅读更多 »