官方使用文档:Getting started · Cloudflare D1 docs
创建数据库
在命令行中执行完成之后,会在本地和远程创建数据库:
npx wrangler@latest d1 create prod-d1-tutorial
在cf中就可以看到数据库:
现在,您的Cloudflare帐户中有一个D1数据库,该数据库与您的Cloudflare Worker绑定。
复制命令输出的最后一部分并将其粘贴到Wrangler文件中。它应该看起来像这样:
接下来,您将在数据库中创建一个数据库表,使用Prisma ORM向D1发送查询。
创建数据表
先在本地创建一个数据库表来测试是否可行,需要在本地新建一个schame.sql文件,里面的内容如下:
-- CreateTable
CREATE TABLE "User" ("id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"email" TEXT NOT NULL,"name" TEXT
);-- CreateIndex
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");DROP TABLE IF EXISTS Customers;
CREATE TABLE IF NOT EXISTS Customers (CustomerId INTEGER PRIMARY KEY, CompanyName TEXT, ContactName TEXT);
INSERT INTO Customers (CustomerID, CompanyName, ContactName) VALUES (1, 'Alfreds Futterkiste', 'Maria Anders'), (4, 'Around the Horn', 'Thomas Hardy'), (11, 'Bs Beverages', 'Victoria Ashworth'), (13, 'Bs Beverages', 'Random Name');
然后在本地执行这个sql以创建数据表 :
npx wrangler d1 execute prod-d1-tutorial --local --file=./migrations/schema.sql
运行命令以验证是否存在这个表:
npx wrangler d1 execute prod-d1-tutorial --local --command="SELECT * FROM Customers"
在Worker中执行查询
开始在worker中执行查询命令来获取数据表中的数据,使用ts的话,直接复制代码到worker中
export interface Env {// If you set another name in the Wrangler config file for the value for 'binding',// replace "DB" with the variable name you defined.DB: D1Database;
}export default {async fetch(request, env): Promise<Response> {const { pathname } = new URL(request.url);if (pathname === '/api/beverages') {// If you did not use `DB` as your binding name, change it hereconst { results } = await env.DB.prepare('SELECT * FROM Customers WHERE CompanyName = ?').bind('Bs Beverages').all();return Response.json(results);}return new Response('Call /api/beverages to see everyone who works at Bs Beverages');},
} satisfies ExportedHandler<Env>;
然后启动服务后,在浏览器中访问http://localhost:8787/api/beverages
就可以得到查询的结果:
将服务部署到线上
要使用Wrangler将Worker部署到生产环境,您必须首先在将--local标志替换为--remote标志后重复数据库配置步骤,以便读取Worker数据。这将创建数据库表并将数据导入数据库的生产版本:
npx wrangler d1 execute prod-d1-tutorial --remote --file=./migrations/schema.sqlnpx wrangler d1 execute prod-d1-tutorial --remote --command="SELECT * FROM Customers"
如果执行没有问题,线上就可以看到结果数据了:
删除数据库
删除数据库的操作只需要执行命令就可以了:
npx wrangler d1 delete prod-d1-tutorial
下一章讲的内容,可以到官方文档最后查看