INTEGRITY Документация

Запрос к D1 с помощью Prisma ORM

Что такое Prisma ORM?

Prisma ORM представляет собой ORM нового поколения для JavaScript и TypeScript, которая благодаря понятной модели данных, автоматическим миграциям, типобезопасности и автодополнению выводит удобство работы с базами данных на новый уровень.

Подробнее о Prisma ORM см. в Документация Prisma.

Запрос к D1 из Cloudflare Worker с помощью Prisma ORM

В этом руководстве показано, как с нуля настроить и развернуть Cloudflare Worker, обращающийся к базе данных D1.

быстрый старт

Если вы хотите пропустить шаги и быстро начать, выберите Deploy to Cloudflare ниже.

Deploy to Cloudflare

Это создаёт репозиторий в вашем аккаунте GitHub и разворачивает приложение в Cloudflare Workers. Выберите этот вариант, если вы уже знакомы с Cloudflare Workers и хотите пропустить пошаговые инструкции.

Если вы только начинаете работать с Cloudflare Workers, можете пройти все шаги вручную.

Предварительные требования

1. Создайте Cloudflare Worker

Откройте терминал и выполните следующую команду, чтобы создать Cloudflare Worker с помощью Cloudflare hello-world шаблон:

npm create cloudflare@latest prisma-d1-example -- --type hello-world

В терминале вам будет задан ряд вопросов о вашем проекте:

  1. Ответьте yes к использованию TypeScript.
  2. Ответьте no к развёртыванию своего Worker.

2. Инициализируйте Prisma ORM

Чтобы настроить Prisma ORM, перейдите в каталог проекта и установите Prisma CLI:

cd prisma-d1-example
npm i -D prisma

Далее установите пакет Prisma Client и драйвер-адаптер для D1:

npm i @prisma/client @prisma/adapter-d1

Наконец, создайте файлы, необходимые для Prisma ORM, с помощью следующей команды:

npx prisma init --datasource-provider sqlite

Приведённая выше команда:

  1. Создает новый каталог с именем prisma который содержит ваш Схема Prisma файл.
  2. Создает .env файл, используемый для настройки переменных окружения, которые будет считывать Prisma CLI.

В этом руководстве вам не понадобится .env файл, поскольку соединение между Prisma ORM и D1 будет происходить через привязка. Следующие шаги проведут вас через настройку этой привязки.

Поскольку вы будете использовать адаптер драйвера функцию, которая сейчас находится в статусе Preview, вам нужно явно включить её через previewFeatures поле в generator блок.

Откройте свой schema.prisma файл и настройте generator блок следующим образом:

schema.prisma
generator client {
  provider        = "prisma-client-js"
  output          = "../src/generated/prisma"
  previewFeatures = ["driverAdapters"]
}

3. Создайте базу данных D1

На этом шаге вы настроите базу данных D1. Создать базу данных D1 можно через Панель управления Cloudflare, либо через wrangler. В этом руководстве используется wrangler CLI.

Откройте терминал и выполните следующую команду:

npx wrangler d1 create prisma-demo-db

В терминале должен появиться следующий вывод:

✅ Successfully created DB 'prisma-demo-db' in region WEUR
Created your new D1 database.

{
  "d1_databases": [
    {
      "binding": "DB",
      "database_name": "prisma-demo-db",
      "database_id": "<D1_DATABASE_ID>"
    }
  ]
}

Теперь у вас есть база данных D1 в аккаунте Cloudflare с привязкой к Cloudflare Worker.

Скопируйте последнюю часть вывода команды и вставьте её в файл Wrangler. Она должна выглядеть примерно так:

{
	"$schema": "./node_modules/wrangler/config-schema.json",
	"name": "prisma-d1-example",
	"main": "src/index.ts",
	// Set this to today's date
	"compatibility_date": "2026-08-28",
	"compatibility_flags": [
		"nodejs_compat"
	],
	"observability": {
		"enabled": true
	},
	"d1_databases": [
		{
			"binding": "DB", // i.e. available in your Worker on env.DB
			"database_name": "prisma-demo-db",
			"database_id": "<D1_DATABASE_ID>"
		}
	]
}
"$schema" = "./node_modules/wrangler/config-schema.json"
name = "prisma-d1-example"
main = "src/index.ts"
# Set this to today's date
compatibility_date = "2026-08-28"
compatibility_flags = [ "nodejs_compat" ]

[observability]
enabled = true

[[d1_databases]]
binding = "DB"
database_name = "prisma-demo-db"
database_id = "<D1_DATABASE_ID>"

Замените <D1_DATABASE_ID> с идентификатором базы данных вашего экземпляра D1. Если не удалось получить этот идентификатор из вывода терминала, его также можно найти в Панель управления Cloudflare, либо выполнив npx wrangler d1 info prisma-demo-db в вашем терминале.

Далее вы создадите в базе данных таблицу, чтобы отправлять запросы к D1 с помощью Prisma ORM.

4. Создайте таблицу в базе данных

Prisma Migrate пока не поддерживает D1, поэтому вы не сможете использовать стандартные процессы миграции через prisma migrate dev или prisma db push.

D1 использует миграции для управления изменениями схемы, а Prisma CLI поможет сгенерировать необходимый SQL для этих обновлений. В шагах ниже вы будете использовать оба инструмента, чтобы создать и применить миграцию базы данных.

Сначала создайте новую миграцию с помощью wrangler:

npx wrangler d1 migrations create prisma-demo-db create_user_table

Ответьте yes созданию новой папки с именем migrations.

Теперь команда создала новый каталог с именем migrations и пустой файл с именем 0001_create_user_table.sql внутри него:

Далее добавьте SQL-оператор, который создаст User таблицу в этот файл.

Откройте schema.prisma файл и добавьте следующее User модель в свою схему:

schema.prisma
model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
}

Теперь выполните в терминале следующую команду, чтобы сгенерировать SQL-оператор, создающий User таблицу, эквивалентную User модель выше:

npx prisma migrate diff --from-empty --to-schema ./prisma/schema.prisma --script --output migrations/0001_create_user_table.sql
npx prisma migrate diff --from-empty --to-schema-datamodel ./prisma/schema.prisma --script --output migrations/0001_create_user_table.sql

Здесь сохраняется SQL-оператор для создания нового User таблицу в вашем предыдущем файле миграции, вот как она выглядит:

0001_create_user_table.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");

UNIQUE INDEX на email был создан, потому что User модель в вашей схеме Prisma использует @unique атрибут на своём email поле.

Теперь нужно использовать wrangler d1 migrations apply команду, чтобы отправить эту инструкцию SQL в D1. Эта команда принимает два параметра:

В этом руководстве вы будете вести разработку и локально, и удалённо: сначала протестируете Worker на своём компьютере, а затем развернёте его.

Откройте терминал и выполните обе команды:

# For the local database
npx wrangler d1 migrations apply prisma-demo-db --local
# For the remote database
npx wrangler d1 migrations apply prisma-demo-db --remote

Выберите Yes оба раза, когда будет предложено подтвердить применение миграции.

Далее создайте данные, которые можно будет запросить после запуска Worker. На этот раз вы выполните SQL-оператор без сохранения его в файле:

# For the local database
npx wrangler d1 execute prisma-demo-db --command "INSERT INTO  \"User\" (\"email\", \"name\") VALUES
('[email protected]', 'Jane Doe (Local)');" --local
# For the remote database
npx wrangler d1 execute prisma-demo-db --command "INSERT INTO  \"User\" (\"email\", \"name\") VALUES
('[email protected]', 'Jane Doe (Remote)');" --remote

5. Выполните запрос к своей базе данных из Worker

Чтобы запросить данные из базы данных через Worker с помощью Prisma ORM, выполните следующее:

  1. Добавить DB к Env интерфейс.
  2. Создайте экземпляр PrismaClient с помощью PrismaD1 адаптер драйвера.
  3. Отправьте запрос с помощью Prisma Client и верните результат.

Откройте src/index.ts и замените всё содержимое следующим:

index.js
import { PrismaClient } from "./generated/prisma/";
import { PrismaD1 } from "@prisma/adapter-d1";

export default {
	async fetch(request, env, ctx) {
		const adapter = new PrismaD1(env.DB);
		const prisma = new PrismaClient({ adapter });

		const users = await prisma.user.findMany();
		const result = JSON.stringify(users);
		return new Response(result);
	},
};
index.ts
import { PrismaClient } from './generated/prisma/';
import { PrismaD1 } from '@prisma/adapter-d1';

export interface Env {
	DB: D1Database;
}

export default {
	async fetch(request, env, ctx): Promise<Response> {
		const adapter = new PrismaD1(env.DB);
		const prisma = new PrismaClient({ adapter });

		const users = await prisma.user.findMany();
		const result = JSON.stringify(users);
		return new Response(result);
	},
} satisfies ExportedHandler<Env>;

Прежде чем запустить Worker, сгенерируйте Prisma Client с помощью следующей команды:

npx prisma generate

6. Запустите Worker локально

Теперь, когда запрос к базе данных готов, а Prisma Client сгенерирован, запустите Worker локально:

npm run dev

Откройте браузер по адресу http://localhost:8787 чтобы проверить результат запроса к базе данных:

[{ "id": 1, "email": "[email protected]", "name": "Jane Doe (Local)" }]

7. Разверните Worker

Чтобы развернуть Worker, выполните следующую команду:

npm run deploy

Откройте свой Worker по адресу https://prisma-d1-example.USERNAME.workers.dev. В вашем браузере должны отобразиться следующие данные, запрошенные из удалённой базы данных D1:

[{ "id": 1, "email": "[email protected]", "name": "Jane Doe (Remote)" }]

Завершив это руководство, вы развернули Cloudflare Worker, который использует D1 в качестве базы данных и обращается к ней через Prisma ORM.