Документация Запланировать пилот

Запрос к 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
('jane@prisma.io', 'Jane Doe (Local)');" --local
# For the remote database
npx wrangler d1 execute prisma-demo-db --command "INSERT INTO  \"User\" (\"email\", \"name\") VALUES
('jane@prisma.io', '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": "jane@prisma.io", "name": "Jane Doe (Local)" }]

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

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

npm run deploy

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

[{ "id": 1, "email": "jane@prisma.io", "name": "Jane Doe (Remote)" }]

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

Запросите бесплатный пилот

Запланировать пилот