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

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

Wednesday, September 16, 2026Omid Saffari
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 测试 asyncpgpg8000psycopg,针对 MySQL 测试 aiomysqlpymysql;推荐使用 asyncpgaiomysql

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 内测试 aiomysqlpymysql,不必再为每个符合条件的应用单独部署数据库代理。

这里的收益在于运维方式统一:每个数据库使用一套 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 以及 LISTENNOTIFY 不受支持;MySQL 多语句查询和协议级预处理语句同样不受支持。Free 与 Paid 方案的单次查询时长上限均为 60 秒。

连接池还会改变应用对会话的假设。Hyperdrive 使用事务池模式,也就是说,事务结束后源数据库连接就会返回连接池。若代码期望会话状态跨事务保留,就必须重新审查。长事务还可能耗尽连接池,抵消并发收益。

周一该做什么

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

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

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

  2. 运行连接冒烟测试

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

  3. 验证真实驱动和查询

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

  4. 算清删除服务的收益

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

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

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

最近更新
2026年9月16日
分类
Explained

在 Google 中优先显示本站

将 omidsaffari.com 添加为 Google 搜索的优先来源

把 omidsaffari.com 设为优先来源,Google 会在 Top Stories、AI Overviews 和 AI Mode 中为您优先展示。

Gemini 3.8 Live:后台查询时,AI 语音助手也能继续对话

Gemini 3.8 Live:后台查询时,AI 语音助手也能继续对话

Gemini 3.8 Live 支持异步函数调用,让 AI 语音助手在日历、订单或预订系统后台查询时继续与来电者沟通。本文拆解标准版与 Extended Thinking 的适用场景、完成信号、音频成本和生产风险,并给出用真实完成任务成本验证试点效果的方法,帮助团队避免误把中间播报当成任务完成。2026年9月16日Explained
Cloudflare Worker 权限细化:把客户部署锁定到单个 Worker

Cloudflare Worker 权限细化:把客户部署锁定到单个 Worker

Cloudflare 现已支持按单个 Worker 配置细粒度权限。本文说明代理商如何用账户拥有的 API Token 将客户 CI 部署限制在一个现有 Worker,并梳理 Editor、Admin、绑定资源、Durable Objects 与 Routes 的实际权限边界,帮助团队缩小凭证泄露后的排查与处置范围。2026年9月15日Explained
Claude Code 网络权限收紧:依赖安装结束即关闭访问

Claude Code 网络权限收紧:依赖安装结束即关闭访问

Claude Code 2.1.271 为沙箱自动模式加入按命令限定的网络权限。本文拆解 allowed_domains 与持久白名单的区别,并用 npm ci 展示如何只在依赖安装期间开放软件源、让后续测试重新回到无网络状态,同时说明托管策略、域名过滤与非沙箱回退仍会如何影响真实边界。2026年9月15日Explained
Vercel AI SDK 订阅计费拆解:Claude Code 与 Codex 到底由谁买单

Vercel AI SDK 订阅计费拆解:Claude Code 与 Codex 到底由谁买单

Vercel AI SDK 可调用宿主机已登录的 Claude Code、Codex 等订阅额度。拆解 auto、direct 与 ai-gateway 的凭证优先级,说明模型费用会落到套餐、供应商 API 还是 AI Gateway,并算清单独支付的 Vercel Sandbox 成本,帮助个人与团队选对计费路径。2026年9月15日Explained
Cloudflare Browser Run 实测:无头浏览器如何锁定域名并开放只读审阅

Cloudflare Browser Run 实测:无头浏览器如何锁定域名并开放只读审阅

Cloudflare Browser Run 新增会话域名白名单和只读 Live View。本文拆解两道边界的适用范围、配置步骤、常见失效点与 Browser Sessions 计费变化,并给出面向客户交付的验证流程和成本公式,帮助你判断这套无头浏览器控制是否值得用于真实客户项目。2026年9月14日Explained
AI电话机器人价格怎么算?GPT-Live-1 通话成本拆解

AI电话机器人价格怎么算?GPT-Live-1 通话成本拆解

GPT-Live-1 的语音会话按每分钟 $0.05 计费,但这不是一通电话的全部成本。本文拆解语音时长、后端模型与工具、运营商传输三笔账,并用 90 秒预约电话算清每次成功解决任务的真实支出,同时说明 SIP 接入、插话处理与人工转接为何会改变最终预算,帮助团队设计可衡量的入站电话试点。2026年9月14日Explained
ChatGPT Windows Appshots:少复制上下文,多检查结果

ChatGPT Windows Appshots:少复制上下文,多检查结果

ChatGPT Windows 桌面版新增 Appshots,可用双 Alt 键把前台窗口的截图和应用可提供的文本带入对话。本文拆解 Appshot 的数据边界、发送目标与隐私风险,并结合客户邮件、报错窗口和设置页面等工作场景,说明如何衡量它是否真的减少上下文复制、准备和返工时间,以及哪些情况下应该暂缓使用。2026年9月14日Explained
Vercel CDN 直送 FastAPI 静态文件:Function 用量怎么降

Vercel CDN 直送 FastAPI 静态文件:Function 用量怎么降

Vercel CDN 现在可直接分发符合条件的 FastAPI 前端与静态文件,避免触发 Function 调用和相关计算用量。本文拆解路由顺序、中间件与依赖项形成的安全边界,说明 Pro、Hobby 账单中哪些指标会下降、哪些 CDN 成本仍然存在,并给出上线后的部署核验清单。2026年9月13日Explained
订阅通讯

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

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