Skip to content

Cloudflare D1 ​

Cloudflare D1 ,云端 SQLite 数据库,表现怪异,不建议生产使用。2022 年 11 月内测,2023 年 09 月公测,2024 年 04 月 01 日正式上线。

使用 ​

D1 可以用于缓存主站的脱敏、活跃数据,供副站使用,如 Vercel 。建库 db ,建表 kv ,两个字段 k、v ,其中 v 是 JSON 格式文本。

推送表结构到 D1

  • Prisma.js 6 支持 npx prisma db push 到 D1 ,Prisma.js 7 建议使用 Cloudflare 官方的 wrangler
  • npx drizzle-kit push

访问官网,选择 D1 数据库。

  • 已读取行
  • 已写入行
  • 计量存储
  • 总存储

点击数据库。

  • 查询总数
  • 已读取行
  • 已写入行
  • 已用存储
  • 表数量

对 D1 使用 COUNT(*) 为全表扫描,假设表有 1 万行,查询 500 次就达到单日免费额度限制。建议另行建表,存储行数等数据,避免全表扫描。

点击控制台。输入 SQL 查询数据库,上下方向键浏览历史查询。查询完成,显示响应时间、查询时间、更改、已读取行、已写入行。

斜杠命令

命令作用
/clear清除控制台输出
/help or /?显示提示
/tables显示数据库的表。
/bookmark数据库当前状态的书签
/bookmark yyyy-mm-ddThh:mm:ss.mmmZ获取时间戳最近的书签
/restore bookmark-id将数据库还原到特定时间点

API ​

// a.ts
import Cloudflare from 'cloudflare';
import dotenv from 'dotenv';
import fs from 'node:fs';

dotenv.config({ path: './.env', quiet: true });
const client = new Cloudflare({
  apiToken: process.env.CLOUDFLARE_D1_TOKEN as string
});
const account_id = process.env.CLOUDFLARE_ACCOUNT_ID as string;
const d1_id = process.env.CLOUDFLARE_D1_ID as string;

(async () => {
  const data = await client.d1.database.query(d1_id, {
    account_id,
    sql: 'SELECT v FROM KV WHERE k = ?',
    params: ['books']
  });
  const rows = data.result[0].results as Array<{ v: string }>;
  fs.writeFileSync('a.json', rows?.[0]?.v ?? '[]');
})();

天下大吉