INTEGRITY Dokumentace

Dotazování D1 pomocí Prisma ORM

Co je Prisma ORM?

Prisma ORM je ORM nové generace pro JavaScript a TypeScript, který díky intuitivnímu datovému modelu, automatizovaným migracím, typové bezpečnosti a automatickému doplňování posouvá práci s databázemi na novou úroveň.

Více o Prisma ORM se dozvíte v Dokumentace Prisma.

Dotazování D1 z Cloudflare Workeru pomocí Prisma ORM

Tento tutoriál ukazuje, jak od začátku nastavit a nasadit Cloudflare Worker, který přistupuje k databázi D1.

Rychlý start

Pokud chcete kroky přeskočit a rychle začít, vyberte Deploy to Cloudflare níže.

Deploy to Cloudflare

Tím se vytvoří repozitář ve vašem účtu GitHub a aplikace se nasadí na Cloudflare Workers. Tuto možnost použijte, pokud Cloudflare Workers dobře znáte a chcete přeskočit podrobné pokyny krok za krokem.

Pokud s Cloudflare Workers teprve začínáte, můžete kroky projít ručně.

Předpoklady

1. Vytvořte Cloudflare Worker

Otevřete terminál a spuštěním následujícího příkazu vytvořte Cloudflare Worker pomocí Cloudflare hello-world šablonu:

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

V terminálu se vám zobrazí řada otázek týkajících se vašeho projektu:

  1. Odpovězte yes na používání TypeScriptu.
  2. Odpovězte no k nasazení vašeho Workeru.

2. Inicializujte Prisma ORM

Pro nastavení Prisma ORM přejděte do adresáře projektu a nainstalujte Prisma CLI:

cd prisma-d1-example
npm i -D prisma

Dále nainstalujte balíček Prisma Client a ovladač adaptéru pro D1:

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

Nakonec pomocí následujícího příkazu vygenerujte soubory potřebné pro Prisma ORM:

npx prisma init --datasource-provider sqlite

Výše uvedený příkaz:

  1. Vytvoří nový adresář s názvem prisma který obsahuje váš Prisma schéma .
  2. Vytvoří .env soubor, který slouží ke konfiguraci proměnných prostředí, jež bude číst Prisma CLI.

V tomto tutoriálu nebudete potřebovat .env soubor, protože propojení mezi Prisma ORM a D1 proběhne přes binding. Následující kroky vás provedou nastavením této vazby.

Protože použijete adaptér ovladače funkci, která je momentálně v Preview, ji musíte explicitně povolit pomocí previewFeatures pole v generator blok.

Otevřete schema.prisma soubor a upravte generator blok tak, aby odpovídal následujícímu:

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

3. Vytvořte svou databázi D1

V tomto kroku nastavíte databázi D1. Databázi D1 můžete vytvořit přes Cloudflare dashboard, nebo prostřednictvím wrangler. Tento tutoriál bude používat wrangler CLI.

Otevřete terminál a spusťte následující příkaz:

npx wrangler d1 create prisma-demo-db

V terminálu byste měli obdržet následující výstup:

✅ 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>"
    }
  ]
}

Nyní máte v účtu Cloudflare databázi D1 s bindingem na váš Cloudflare Worker.

Zkopírujte poslední část výstupu příkazu a vložte ji do svého souboru Wrangler. Mělo by to vypadat přibližně takto:

{
	"$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>"

Nahraďte <D1_DATABASE_ID> s ID databáze vaší instance D1. Pokud se vám nepodařilo toto ID zjistit z výstupu terminálu, najdete ho také v Cloudflare dashboard, nebo spuštěním npx wrangler d1 info prisma-demo-db ve vašem terminálu.

Dále v databázi vytvoříte tabulku, abyste mohli odesílat dotazy do D1 pomocí Prisma ORM.

4. Vytvořte tabulku v databázi

Prisma Migrate zatím nepodporuje D1, takže nemůžete použít výchozí postupy migrace pomocí prisma migrate dev nebo prisma db push.

D1 využívá migrace pro správu změn schématu a Prisma CLI vám pomůže vygenerovat potřebné SQL pro tyto aktualizace. V následujících krocích použijete oba nástroje k vytvoření a použití migrace databáze.

Nejprve vytvořte novou migraci pomocí wrangler:

npx wrangler d1 migrations create prisma-demo-db create_user_table

Odpovězte yes k vytvoření nové složky s názvem migrations.

Příkaz nyní vytvořil nový adresář s názvem migrations a prázdný soubor s názvem 0001_create_user_table.sql uvnitř:

Dále musíte přidat příkaz SQL, který vytvoří User tabulku do tohoto souboru.

Otevřete schema.prisma soubor a přidejte následující User model do svého schématu:

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

Nyní v terminálu spusťte následující příkaz, který vygeneruje příkaz SQL vytvářející User tabulka odpovídající User model výše:

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

Tím se uloží příkaz SQL k vytvoření nové User tabulku v souboru migrace z předchozího kroku, zde je, jak vypadá:

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 na email byla vytvořena, protože User model ve vašem schématu Prisma používá @unique atribut na svém email .

Nyní musíte použít wrangler d1 migrations apply příkaz k odeslání tohoto příkazu SQL do D1. Tento příkaz přijímá dvě možnosti:

V tomto tutoriálu budete provádět lokální i vzdálený vývoj. Worker nejprve otestujete lokálně a poté ho nasadíte.

Otevřete terminál a spusťte oba příkazy:

# 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

Vyberte Yes pokaždé, když budete vyzváni k potvrzení, že se má migrace použít.

Dále vytvořte data, která budete moci dotazovat, jakmile Worker poběží. Tentokrát spustíte příkaz SQL, aniž byste ho ukládali do souboru:

# 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. Dotazujte databázi z Workeru

Pro dotazování databáze z Workeru pomocí Prisma ORM je třeba:

  1. Přidejte DB do Env rozhraní.
  2. Vytvořte instanci PrismaClient pomocí PrismaD1 adaptéru ovladače.
  3. Odešlete dotaz pomocí Prisma Client a vraťte výsledek.

Otevřete src/index.ts a nahraďte celý obsah následujícím:

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>;

Než Worker spustíte, vygenerujte Prisma Client pomocí následujícího příkazu:

npx prisma generate

6. Spusťte Worker lokálně

Nyní, když máte databázový dotaz hotový a Prisma Client vygenerovaný, spusťte Worker lokálně:

npm run dev

Otevřete prohlížeč na adrese http://localhost:8787 ke kontrole výsledku databázového dotazu:

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

7. Nasaďte Worker

Chcete-li nasadit Worker, spusťte následující příkaz:

npm run deploy

Přistupte ke svému Workeru na adrese https://prisma-d1-example.USERNAME.workers.dev. V prohlížeči by se měla zobrazit následující data načtená z vaší vzdálené databáze D1:

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

Dokončením tohoto výukového kurzu jste nasadili Cloudflare Worker, který používá D1 jako databázi a dotazuje se na ni pomocí Prisma ORM.