Cloudflare Hyperdrive 打通 Python Workers 与现有数据库

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

发布于

Cloudflare Hyperdrive 打通 Python Workers 与现有数据库

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 Worker 通过 Hyperdrive 访问现有数据库,同时移除原有的纯数据库桥接服务
数据库无需搬迁。Hyperdrive 可以替代只负责转发数据库流量的桥接服务。

这条支持路径有明确边界。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 配置,让首次测试测到一次真实的新数据库往返:

Bash
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:

TOML
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 中加入驱动:

TOML
[project]
dependencies = [
    "aiomysql",
]

然后在 src/main.py 中使用 Cloudflare 文档提供的连接测试:

Python
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 命令部署:

Bash
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 使用事务池模式,也就是说,事务结束后源数据库连接就会返回连接池。若代码期望会话状态跨事务保留,就必须重新审查。长事务还可能耗尽连接池,抵消并发收益。

周一该做什么

周一不要直接迁移整个应用。先验证那个只负责数据库连接的桥接服务是否还有存在的必要。

  1. 选择一条可丢弃的测试路径

    创建一个非生产数据库或副本,并使用权限受限的用户。选择一条只读取无敏感记录,且不依赖会话状态、锁或写后立即读一致性的路由。

  2. 运行连接冒烟测试

    部署上面的精简 Worker,确认 SELECT 1 能通过 Hyperdrive 成功执行。记录 Worker 错误率、CPU 时间、实际耗时和数据库连接数。

  3. 验证真实驱动和查询

    将冒烟查询替换为该路由实际使用的驱动和一条有代表性的查询。把返回数据、事务行为、缓存设置和连接池使用情况与当前桥接服务逐项对比。

  4. 算清删除服务的收益

    记下桥接主机的月度账单,以及部署、补丁、监控和故障恢复所花的工时,再扣除新增的 Workers 用量和持续的 Hyperdrive 运维投入。只有收益计算和兼容性测试都给出肯定答案,才删除桥接服务。

如果桥接服务仅用于数据库访问、应用使用 PostgreSQL 或 MySQL,且已有经过验证的驱动覆盖目标路由,本周就可以行动。若依赖异步 SQLAlchemy、不可用的软件包、不受支持的 SQL 行为,或尚未拆分的严格写后读一致性需求,则应等待。如果应用会继续留在现有服务器,或者桥接服务承载着 Hyperdrive 无法替代的业务逻辑,那么这次更新对你没有影响。

想把下一次平台变化也转化成周一就能执行的判断,可以订阅 newsletter。

发布日期
分类
Explained
AI智能体成本怎么算?三种方案的月度账单拆解

AI智能体成本怎么算?三种方案的月度账单拆解

AI智能体成本不能只看订阅价或 token 单价。本文以每月回复 1,000 封客服邮件为例,拆解成品助手、无代码工作流平台和自建 API 三种方案的账单,说明额度、年付首笔支出、重试、工具调用与人工审核怎样影响预算,帮你算清每条审核通过回复的真实成本,并判断哪种方案适合团队持续运营。2026年10月7日Explained
Grok 语音转文字升级 2.0:价格不变,默认模型已切换

Grok 语音转文字升级 2.0:价格不变,默认模型已切换

Grok Voice Transcribe 2.0 的批处理仍为每音频小时 $0.10,流式处理仍为 $0.20,但省略 model 参数时默认模型已经切换。本文拆解价格、适用场景和迁移风险,并给出用真实音频对比 1.0 与 2.0、核对人工校正时间和下游结果,再显式锁定生产模型的操作清单。2026年9月20日Explained
Cloudflare Browser Run 加强浏览器自动化调试:失败任务先查再重跑

Cloudflare Browser Run 加强浏览器自动化调试:失败任务先查再重跑

Cloudflare 为已完成的 Browser Run 录制加入 Inspect 面板,可集中查看控制台日志、网络请求、HAR 和最终 DOM。本文讲清如何启用 Session Recording、按 target 获取网络轨迹,并判断哪些失败应先查现有证据,哪些仍需截图与应用日志,减少浏览器重跑和人工复现时间。2026年9月19日Explained
v0 接入 npm 私有包:让原型直接复用团队组件库

v0 接入 npm 私有包:让原型直接复用团队组件库

v0 现已支持通过共享环境变量安装 npm 私有包,让原型直接复用团队现有组件库。本文拆解 NPM_TOKEN 与 NPM_RC 的适用场景、最小权限配置、真实仓库交接检查,以及上线前仍需补齐的文档、安全与工程验证,帮助团队判断这项能力能否减少组件替换返工,并厘清凭证如何留在模型与沙箱文件系统之外。2026年9月19日Explained
Claude Code 自动模式不再单收分类器费用,但有前提

Claude Code 自动模式不再单收分类器费用,但有前提

Claude Code 2.1.278 可在符合条件的 API 与 Enterprise 会话中取消自动模式分类器的单独费用,但网关、区域或凭证仍可能触发计费回退。本文说明如何通过 /status 确认服务端路径、排查 safeguards 等透传字段,并在调整智能体预算前验证真实生产链路。2026年9月19日Explained
Vercel 构建费用新机制:Turbo 可按单次部署启用

Vercel 构建费用新机制:Turbo 可按单次部署启用

Vercel 现在允许 Pro 和 Enterprise 项目仅为一次部署启用 Turbo,无需修改项目默认构建机器。本文拆解 GitHub、CLI 与 API 三种用法,并用同一组计费数据说明何时值得为紧急发布支付更高的 Vercel 构建费用,以及如何验证下一次部署已恢复原配置。2026年9月18日Explained
ChatGPT for Word 上线:写文档不再来回复制

ChatGPT for Word 上线:写文档不再来回复制

ChatGPT for Word 将起草、摘要、选中文本修改和基础排版直接带进 Word 侧边栏。本文详解插件的安装条件、Microsoft 与 ChatGPT 双重管理权限、共享用量和 token 费率、数据边界,以及一套可执行的文档编辑流程,帮助团队判断是否值得启用,并用真实文档衡量省下的搬运时间与新增的审核成本。2026年9月18日Explained
Antigravity 迁移指南:10 月 5 日前升级本地任务

Antigravity 迁移指南:10 月 5 日前升级本地任务

Google 将于 2026 年 10 月 5 日停用 5 月版 Antigravity 智能体。本指南拆解 Antigravity 迁移路径:仅消费最终输出的远程任务只需更换智能体 ID;使用本地工具或解析 function_call 的集成,还必须更新工具适配器、参数校验与测试流程,避免定时任务在截止日后悄然中断。2026年9月18日Explained
订阅通讯

每周日,一封信。写运转中的系统,不写热评。

每周一期。无垃圾邮件。随时退订。