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_name | D1 数据库在 Cloudflare 控制台中显示的名称。 | 用于管理和识别。 |
database_id | D1 数据库的唯一标识符。 | 最关键的参数。您必须在 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_id 和 binding 名称,然后直接在 Worker 代码中使用 env.BINDING_NAME 变量。
CF D1 database 访问
https://yukkihome.netlify.app/posts/network/cf-workers/