632 字
3 分钟
CF D1 database 访问

D1 必须通过 Cloudflare Workers 或 Pages Functions 访问。您不能像传统数据库那样使用 IP 地址或端口从外部直接连接。

以下是 Worker 访问 D1 的详细步骤和配置参数:


Cloudflare Worker 访问 D1 的步骤#

1. 在 wrangler.toml 文件中配置绑定#

D1 数据库是通过一种称为“Bindings”的机制连接到 Worker 的。您需要在 Worker 项目的配置文件 wrangler.toml 中声明这个绑定。

配置示例:

name = "my-d1-worker"
main = "src/index.ts"
compatibility_date = "2024-01-01"
# D1 数据库绑定部分
[[ d1_databases ]]
binding = "DB" # 1. Worker 脚本中引用的变量名
database_name = "my-d1-db" # 2. D1 数据库的实际名称 (在 Cloudflare 控制台创建的)
database_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" # 3. D1 数据库的唯一 ID

关键参数解释:

参数描述用途
binding您的 Worker 脚本中将用来访问 D1 的环境变量名。在您的代码中,您会通过 env.DB 来调用 D1 API。
database_nameD1 数据库在 Cloudflare 控制台中显示的名称。用于管理和识别。
database_idD1 数据库的唯一标识符最关键的参数。您必须在 Cloudflare 控制台的 D1 页面获取此 ID。

2. 在 Worker 脚本中执行查询#

一旦绑定配置完成,D1 数据库就会作为环境变量注入到您的 Worker 代码中。

TypeScript/JavaScript 示例:

假设您的 Worker 是一个Module Worker,并且您的 wrangler.toml 中配置的 binding"DB"

// src/index.ts (或 .js)
export interface Env {
DB: D1Database; // D1Database 类型是 Cloudflare 提供的
}
export default {
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
try {
// 1. 使用绑定变量 (env.DB) 访问 D1
const { results } = await env.DB.prepare(
"SELECT * FROM users WHERE status = ?"
)
.bind("active") // 绑定参数以防止 SQL 注入
.all(); // 执行并获取所有结果
// 2. 返回查询结果
return Response.json({ success: true, users: results });
} catch (error) {
console.error(error);
return Response.json({ success: false, error: "Database query failed" }, { status: 500 });
}
},
};

核心访问方法:

在 Worker 代码内部,您使用 env.DB(或您在 binding 中设置的任何名称)来访问 D1 API:

  • env.DB.prepare(sql): 准备一个 SQL 语句(推荐使用这种方式)。
  • .bind(params...): 绑定参数(非常重要,用于安全地处理用户输入)。
  • .all(): 执行语句并返回所有结果。
  • .first(): 执行语句并返回第一行结果。
  • .run(): 执行非查询语句(如 INSERT, UPDATE, DELETE),返回执行信息(如影响的行数)。

总结一下,访问 D1 不是通过网络连接字符串,而是通过在 wrangler.toml 中配置 database_idbinding 名称,然后直接在 Worker 代码中使用 env.BINDING_NAME 变量。

CF D1 database 访问
https://yukkihome.netlify.app/posts/network/cf-workers/
作者
MuYukki
发布于
2025-10-16
许可协议
CC BY-NC-SA 4.0