跳转到内容

D1

D1 是 Worker 可查询的 SQLite 数据库。在 open-compute 上,每个 database 是运行 ocd 的主机上的一份 SQLite,不提供只读副本。

例如:

  • 从 Worker 查询关系数据
  • 导入 schema 并执行 SQL
  • 在同一事务中执行多条语句
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const { results } = await env.DB.prepare(
"SELECT * FROM Customers WHERE CompanyName = ?",
)
.bind("Bs Beverages")
.all();
return Response.json(results);
},
} satisfies ExportedHandler<{ DB: D1Database }>;

在 cloudflare.config.ts 中绑定已存在的 database:

import { bindings, defineConfig } from "cf/config";
export default defineConfig({
worker: {
name: "d1-app",
entrypoint: "src/index.ts",
env: {
DB: bindings.d1({ id: "<d1-database-id>", name: "app" }),
},
},
});

database_id 必须指向平台上已有的 database。语法见绑定。类型生成使用项目内 cf,真实 target 部署使用 ocd cf deploy。

主题 Cloudflare open-compute
Worker API D1 Worker API 相同:prepare / bind / run / all / first / raw / exec / batch、session、bookmark、prepared-statement / result / meta
存储位置 托管 D1(可含只读副本) 本机一份 SQLite
只读副本 提供 不提供
按区域路由 提供 不提供
served_by 地域信息 region / colo 不提供;served_by_* 不表示地域产品
Bookmark 跨副本因果顺序 同一数据库上的本地顺序
rows_read / rows_written 计费计数 本地 SQLite 执行计数
dump() 托管非 alpha 拒绝 同样拒绝(D1_DUMP_ERROR)
REST / client/v4 提供 兼容 account-scoped database 与 query 操作

下一步:使用 bindings 开发 · 兼容性与限制