Cloudflare Hyperdrive 打通 Python Workers 与现有数据库
Cloudflare Hyperdrive 现已让 Python Workers 直接连接现有 PostgreSQL 和 MySQL 数据库。本文拆解何时可删除数据库桥接服务、Workers 与 Hyperdrive 的费用边界、驱动和 ORM 限制,并给出从 SELECT 1 到真实路由验证的安全迁移步骤。

2026 年 9 月 16 日,Cloudflare Hyperdrive 为 Python Workers 打通了直连 PostgreSQL 和 MySQL 的通道。这项来自 Cloudflare 的更新意味着:如果 Worker 只是为了访问现有数据库才不得不经过一个独立的 HTTP 服务,现在这层服务可能可以移除,架构和每月账单都会随之改变。
Cloudflare Hyperdrive 让数据库留在原地
这次更新真正有价值的地方,在于哪些东西不必迁移。
Hyperdrive 是位于 Cloudflare Worker 与现有 PostgreSQL 或 MySQL 数据库之间的托管连接层。它不是一套新数据库,也不会把记录复制到 Cloudflare。Python 代码使用常规数据库驱动,通过 Hyperdrive 绑定提供的连接信息建立 TCP 连接;Hyperdrive 则负责维护通往后端数据库的长连接池。
这改变了以往常见的变通方案。过去,Python Worker 无法直接走数据库连接时,往往要调用一个小型 API 或服务器,而后者唯一的职责就是执行 SQL。连接路径原本是:
此前: Python Worker → 数据库桥接服务 → PostgreSQL 或 MySQL
现在: Python Worker → Hyperdrive → PostgreSQL 或 MySQL
Cloudflare 会在靠近 Worker 的位置完成连接初始化,并在靠近源数据库的位置维持连接池。其 Hyperdrive 指南 指出,传统方案在执行第一条查询前需要七次往返:TCP 一次、TLS 三次、数据库身份验证三次。复用连接池后,短生命周期的 Worker 每次调用都不必重新完成整套握手。

这条支持路径有明确边界。Python Workers 的兼容日期必须为 2026-09-08 或更晚,而且该功能仍处于 beta 阶段。Cloudflare 已针对 PostgreSQL 测试 asyncpg、pg8000 和 psycopg,针对 MySQL 测试 aiomysql 和 pymysql;推荐使用 asyncpg 和 aiomysql。
Cloudflare 表示,其他 TCP 驱动也可能可用。但这并不等于承诺所有软件包、ORM 或现有应用都能正常运行。数据库兼容只是第一道门槛,远不是迁移完成的保证。
哪一笔成本发生了变化
最明确的成本收益,出现在应用已经运行于 Python Workers、却仅仅为了让 Worker 访问数据库而额外付费维护桥接服务的场景。
计算方式很直接:
当前月度成本 = 数据库 + Worker + 桥接主机
可能的月度成本 = 数据库 + Worker
数据库费用不会消失。在 Workers Paid 方案中,Hyperdrive 内置的连接池和查询缓存不单独收费,也没有出口流量费。因此,如果账户原本就在 Workers 的套餐用量内,这条连接路径带来的 Cloudflare 增量费用就是 $0。真正可能节省的现金,是确实能够取消的桥接主机账单。
维护成本也应计入同一笔账。移除桥接服务,还可能同时省掉一套部署、一次健康检查、一组密钥、一条日志流和一个故障边界。在明确由谁维护、故障多久发生一次之前,不要急着给这部分工作标价。
对于新开通的付费账户,Workers Paid 的起步价为每个账户每月 $5。套餐每月包含 10 million 次请求和 30 million CPU 毫秒;超出部分按每增加 1 million 次请求 $0.30、每增加 1 million CPU 毫秒 $0.02 计费。该方案列出的 Hyperdrive 数据库查询次数不设上限。
Free 方案足以承载小规模验证:每天包含 100,000 次 Worker 请求和 100,000 次 Hyperdrive 数据库查询,每次调用可使用 10 毫秒 CPU 时间。这两项分别计数。一次请求若执行多条 SQL 语句,也可能消耗多次数据库查询。
哪些团队明天就能开始验证
使用 FastAPI 服务的独立创业者
假设一位创业者在托管 PostgreSQL 数据库前运行着一个 FastAPI Worker,同时还有一个小型容器专门接收 HTTP 调用并执行 SQL。如果该容器不承载任何业务逻辑,就可以用 asyncpg 做一次测试,判断 Hyperdrive 能否取代它。
收益并不是换用新数据库,而是在保留现有 schema、备份和服务商的同时,删掉一个仅充当连接适配器的服务。更稳妥的做法是先迁移一条路由,对比返回结果与延迟;确认生产环境表现一致后,再移除桥接服务。
管理客户 MySQL 数据库的小型代理公司
一家小型代理公司可能维护着数个轻量 Python API,每个 API 都连接某位客户的 MySQL 数据库。有了这条新路径,团队可以直接在 Worker 内测试 aiomysql 或 pymysql,不必再为每个符合条件的应用单独部署数据库代理。
这里的收益在于运维方式统一:每个数据库使用一套 Hyperdrive 配置,所有应用沿用同一条 Worker 部署路径。但如果桥接服务还负责租户授权、schema 转换、审计或查询转发之外的其他任务,就仍然需要保留。
只迁移一个读密集型端点的平台团队
平台团队不必一次迁移整个后端。可以先把一个面向公网、读请求密集的 Python 端点迁至 Workers,区域数据库保持不动,再由 Hyperdrive 维护源端连接池。
这种场景还需要明确决定缓存策略。Hyperdrive 默认缓存符合条件的读取结果 60 秒,并可能在重新验证期间继续提供最长 15 秒的旧结果。公开目录或内容读取或许可以接受;身份验证、权限、账单状态以及写入后立即读取等场景,则应使用另一套禁用缓存的 Hyperdrive 配置。
此前的 Django 与 FastAPI 对比 仍可用于框架选型。这次更新改变了其中一个判断条件:保留 PostgreSQL 或 MySQL,如今已成为有文档支持的 Python Worker 路径,但它并不代表 Django 或 FastAPI 应用的其余部分也获得了兼容认证。
搭建最小且安全的连接测试
请使用非生产 MySQL 数据库和权限受限的测试用户。目标是通过 SELECT 1 验证连接路径,而不是拿客户数据演练完整迁移。
先创建一套禁用缓存的 Hyperdrive 配置,让首次测试测到一次真实的新数据库往返:
npx wrangler hyperdrive create python-db-test --connection-string="mysql://user:password@HOSTNAME_OR_IP_ADDRESS:PORT/database_name" --caching-disabled将 Wrangler 返回的配置 ID 写入 wrangler.toml。以下日期晚于要求的最低日期 2026-09-08:
name = "python-hyperdrive"
main = "src/main.py"
compatibility_date = "2026-09-16"
compatibility_flags = ["python_workers"]
[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<HYPERDRIVE_CONFIG_ID>"在 pyproject.toml 中加入驱动:
[project]
dependencies = [
"aiomysql",
]然后在 src/main.py 中使用 Cloudflare 文档提供的连接测试:
import aiomysql
from workers import Response, WorkerEntrypoint
class Default(WorkerEntrypoint):
async def fetch(self, request):
hd = self.env.HYPERDRIVE
connection = await aiomysql.connect(
host=hd.host,
port=int(hd.port),
user=hd.user,
password=hd.password,
db=hd.database,
ssl=None,
)
try:
cursor = await connection.cursor()
await cursor.execute("SELECT 1")
result = await cursor.fetchone()
return Response.json({"result": result[0]})
finally:
connection.close()使用文档中的 Python Workers 命令部署:
uv run pywrangler deploy最容易让人产生疑问的是 ssl=None。在 Cloudflare 的示例中,这里指的是从 Worker 到 Hyperdrive 的驱动连接。Hyperdrive 到源数据库的连接仍然要求 TLS,且不支持不安全的明文源端连接。
桥接服务只是可选,并未自动过时
这次发布改变的是连接路径,并没有把 Python Workers 变成不受限制的 CPython 服务器。
Python 软件包支持范围包括纯 Python 包、PyEmscripten wheels,以及 Pyodide 内置的软件包。Cloudflare 仍将 WebAssembly 软件包支持称为早期功能,因此只要缺少一个依赖,迁移就可能停下。驱动与 ORM 文档 目前只支持同步 SQLAlchemy。异步 SQLAlchemy 尚不受支持,因为 Workers 环境缺少 greenlet 支持。
数据库协议本身也有边界。Hyperdrive 支持 PostgreSQL 9.0 至 17.x、MySQL 5.7 至 8.x,以及 MariaDB;不支持 SQL Server 或 MongoDB。PostgreSQL advisory locks 以及 LISTEN、NOTIFY 不受支持;MySQL 多语句查询和协议级预处理语句同样不受支持。Free 与 Paid 方案的单次查询时长上限均为 60 秒。
连接池还会改变应用对会话的假设。Hyperdrive 使用事务池模式,也就是说,事务结束后源数据库连接就会返回连接池。若代码期望会话状态跨事务保留,就必须重新审查。长事务还可能耗尽连接池,抵消并发收益。
周一该做什么
周一不要直接迁移整个应用。先验证那个只负责数据库连接的桥接服务是否还有存在的必要。
选择一条可丢弃的测试路径
创建一个非生产数据库或副本,并使用权限受限的用户。选择一条只读取无敏感记录,且不依赖会话状态、锁或写后立即读一致性的路由。
运行连接冒烟测试
部署上面的精简 Worker,确认
SELECT 1能通过 Hyperdrive 成功执行。记录 Worker 错误率、CPU 时间、实际耗时和数据库连接数。验证真实驱动和查询
将冒烟查询替换为该路由实际使用的驱动和一条有代表性的查询。把返回数据、事务行为、缓存设置和连接池使用情况与当前桥接服务逐项对比。
算清删除服务的收益
记下桥接主机的月度账单,以及部署、补丁、监控和故障恢复所花的工时,再扣除新增的 Workers 用量和持续的 Hyperdrive 运维投入。只有收益计算和兼容性测试都给出肯定答案,才删除桥接服务。
如果桥接服务仅用于数据库访问、应用使用 PostgreSQL 或 MySQL,且已有经过验证的驱动覆盖目标路由,本周就可以行动。若依赖异步 SQLAlchemy、不可用的软件包、不受支持的 SQL 行为,或尚未拆分的严格写后读一致性需求,则应等待。如果应用会继续留在现有服务器,或者桥接服务承载着 Hyperdrive 无法替代的业务逻辑,那么这次更新对你没有影响。
想把下一次平台变化也转化成周一就能执行的判断,可以订阅 newsletter。
- 最近更新
- 2026年9月16日







