← Cloudflare D1 / d1 / tutorials
Запрос к D1 с помощью Prisma ORM
Что такое Prisma ORM?
Prisma ORM ↗ представляет собой ORM нового поколения для JavaScript и TypeScript, которая благодаря понятной модели данных, автоматическим миграциям, типобезопасности и автодополнению выводит удобство работы с базами данных на новый уровень.
Подробнее о Prisma ORM см. в Документация Prisma ↗.
Запрос к D1 из Cloudflare Worker с помощью Prisma ORM
В этом руководстве показано, как с нуля настроить и развернуть Cloudflare Worker, обращающийся к базе данных D1.
быстрый старт
Если вы хотите пропустить шаги и быстро начать, выберите Deploy to Cloudflare ниже.
Это создаёт репозиторий в вашем аккаунте GitHub и разворачивает приложение в Cloudflare Workers. Выберите этот вариант, если вы уже знакомы с Cloudflare Workers и хотите пропустить пошаговые инструкции.
Если вы только начинаете работать с Cloudflare Workers, можете пройти все шаги вручную.
Предварительные требования
Node.js↗ иnpm↗ установлен на вашем компьютере.- A Аккаунт Cloudflare ↗.
1. Создайте Cloudflare Worker
Откройте терминал и выполните следующую команду, чтобы создать Cloudflare Worker с помощью Cloudflare hello-world ↗ шаблон:
npm create cloudflare@latest prisma-d1-example -- --type hello-worldВ терминале вам будет задан ряд вопросов о вашем проекте:
- Ответьте
yesк использованию TypeScript. - Ответьте
noк развёртыванию своего Worker.
2. Инициализируйте Prisma ORM
Чтобы настроить Prisma ORM, перейдите в каталог проекта и установите Prisma CLI:
cd prisma-d1-examplenpm i -D prismaДалее установите пакет Prisma Client и драйвер-адаптер для D1:
npm i @prisma/client @prisma/adapter-d1Наконец, создайте файлы, необходимые для Prisma ORM, с помощью следующей команды:
npx prisma init --datasource-provider sqliteПриведённая выше команда:
- Создает новый каталог с именем
prismaкоторый содержит ваш Схема Prisma ↗ файл. - Создает
.envфайл, используемый для настройки переменных окружения, которые будет считывать Prisma CLI.
В этом руководстве вам не понадобится .env файл, поскольку соединение между Prisma ORM и D1 будет происходить через привязка. Следующие шаги проведут вас через настройку этой привязки.
Поскольку вы будете использовать адаптер драйвера ↗ функцию, которая сейчас находится в статусе Preview, вам нужно явно включить её через previewFeatures поле в generator блок.
Откройте свой schema.prisma файл и настройте generator блок следующим образом:
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 внутри него:
- prisma-d1-example
- миграции
- 0001_create_user_table.sql
- миграции
Далее добавьте SQL-оператор, который создаст User таблицу в этот файл.
Откройте schema.prisma файл и добавьте следующее User модель в свою схему:
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.sqlnpx prisma migrate diff --from-empty --to-schema-datamodel ./prisma/schema.prisma --script --output migrations/0001_create_user_table.sqlЗдесь сохраняется SQL-оператор для создания нового User таблицу в вашем предыдущем файле миграции, вот как она выглядит:
-- 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. Эта команда принимает два параметра:
--local: Выполняет инструкцию для локальный версия D1. Эта локальная версия D1 представляет собой файл базы данных SQLite, который будет находиться в.wrangler/stateкаталог вашего проекта. Используйте этот подход, если хотите разрабатывать и тестировать Worker на локальном компьютере. См. Локальная разработка чтобы узнать больше.--remote: Выполняет инструкцию для вашей удалённый версия D1. Эта версия используется вашим развёрнут Cloudflare Workers. См. Удалённая разработка чтобы узнать больше.
В этом руководстве вы будете вести разработку и локально, и удалённо: сначала протестируете 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)');" --remote5. Выполните запрос к своей базе данных из Worker
Чтобы запросить данные из базы данных через Worker с помощью Prisma ORM, выполните следующее:
- Добавить
DBкEnvинтерфейс. - Создайте экземпляр
PrismaClientс помощьюPrismaD1адаптер драйвера. - Отправьте запрос с помощью Prisma Client и верните результат.
Откройте src/index.ts и замените всё содержимое следующим:
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);
},
};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 generate6. Запустите 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.
Дополнительные материалы
- Документация Prisma ↗.
- Чтобы получить помощь, откройте новое Обсуждение на GitHub ↗, или задать вопрос ИИ-боту в документации Prisma ↗.
- Готовые к использованию примеры на основе Prisma ORM ↗.
- Ознакомьтесь с Сообщество Prisma ↗, следуйте Prisma в X ↗ и присоединяйтесь к Prisma Discord ↗.
- Developer Experience Redefined: Prisma & Cloudflare Lead the Way to Data DX ↗.