Přeskočit na obsah

Drizzle vs Prisma: proč v produkci používáme obě ORM

Pro CTO a vývojářeRozhodnutí CTO · Aktualizováno

Filip Papraneczakladatel Digitaliko

Drizzle vs Prisma: jedno schéma, dvě ORM. Ilustrace: okno se schema.prisma vedle okna se schema.ts a definicí sqliteTable, obě míří k SQL souboru s migrací.Drizzle vs Prisma: jedno schéma, dvě ORM. Ilustrace: okno se schema.prisma vedle okna se schema.ts a definicí sqliteTable, obě míří k SQL souboru s migrací.

Drizzle vs Prisma pro nás není remíza, ale ani souboj s vítězem. Obě ORM máme v produkci: Prismu na Postgresu ve starších klientských aplikacích a Drizzle na Cloudflare D1 v každé nové aplikaci, od kdy novou práci stavíme na Workers. Krátká odpověď: Drizzle vyberte, když nasazujete na serverless nebo edge a chcete schéma a migrace jako čistý TypeScript a SQL. Prismu nechte tam, kde už funguje.

Většinu srovnání píše jeden ze dvou dodavatelů nebo někdo, kdo postavil demo dvakrát. Tohle vychází z repozitářů, které udržujeme, s konfigurací tak, jak je.

Drizzle vs Prisma: jaký je skutečný rozdíl?

Obě vám dají typovaného klienta databáze v TypeScriptu. Rozdíl je v tom, kde žije schéma a jak daleko je ORM od SQL.

PrismaDrizzle
Schémaschema.prisma, vlastní jazyksoubory .ts, čistý TypeScript
Klientgeneruje ho prisma generatetypem je samotné schéma, pro dotazy se negeneruje
Dotazyobjektové API (findMany, include)ve tvaru SQL (select().from().where()) plus relační API
Migraceprisma migrate dev / deploydrizzle-kit generate zapíše SQL soubory, spustíte je vy
Kde ho používámePostgres ve starších Next.js aplikacíchCloudflare D1 (SQLite) v nových aplikacích
Engineod Prismy 7 klient bez Rustupodle dokumentace „exactly 0 dependencies“

Dokumentace Drizzlu ho popisuje jako „dialect-specific, slim, performant and serverless-ready by design“ (Drizzle overview, ověřeno 24. 10. 2026). Prisma je nástroj o úroveň výš: popíšete modely a SQL vymyslí ona.

Proč nové aplikace běží na Drizzlu?

Naše nové aplikace běží na Cloudflare Workers s D1, což je SQLite. Stejné nastavení má náš startovací template i naše interní nástroje. Celá konfigurace Drizzlu je tohle:

// packages/db/drizzle.config.ts
import { defineConfig } from 'drizzle-kit'

export default defineConfig({
  schema: './src/schema',
  out: './src/migrations',
  dialect: 'sqlite',
  driver: 'd1-http',
})

Schéma je soubor v TypeScriptu. Zkráceně z našeho templatu:

// packages/db/src/schema/records.ts
import { sql } from 'drizzle-orm'
import { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'
import { user } from './auth'

const record = sqliteTable('record', {
  id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()),
  name: text('name').notNull(),
  status: text('status', { enum: ['active', 'inactive', 'pending'] }).default('active').notNull(),
  createdById: text('created_by_id').references(() => user.id, { onDelete: 'set null' }),
  createdAt: integer('created_at', { mode: 'timestamp_ms' })
    .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)
    .notNull(),
})

Klient je jeden řádek nad vazbou na D1 a dotaz se čte jako SQL:

import { drizzle } from 'drizzle-orm/d1'
import * as schema from './schema'

const createDb = () => drizzle(env.DB, { schema })

const [total] = await ctx.db.select({ count: count() }).from(record)

U nové práce rozhodly tři důvody:

  • Prostředí. Cílem byly D1 a Workers. Drizzle se připojí přes import { drizzle } from 'drizzle-orm/d1' (Drizzle a D1).
  • Agent čte schéma přímo. AI dnes píše veškerý náš kód a za produkci ručí senior. Schéma v TypeScriptu je obyčejný kód: agent ho upraví, typová kontrola hned chytí špatný sloupec a není tu vygenerovaný klient, kterého by někdo zapomněl přegenerovat.
  • Migrace jsou SQL v PR. Kdo dělá review, vidí přesný ALTER TABLE, ne diff souboru s modelem.

Přihlašování používá stejnou databázi. Better Auth se připojí přes drizzleAdapter(db, { provider: 'sqlite' }), takže uživatelé a sessions jsou obyčejné tabulky vedle tabulek aplikace.

Drizzle vs Prisma vedle sebe. Vlevo Prisma ve starších aplikacích: schema.prisma, prisma generate, prisma migrate deploy v buildu, Postgres. Vpravo Drizzle v nových aplikacích: schema.ts v TypeScriptu, drizzle-kit generate zapíše SQL soubor, nasazení ho spustí na Cloudflare D1. Patička: nové aplikace na Drizzlu, fungující aplikace s Prismou zůstávají.Drizzle vs Prisma vedle sebe. Vlevo Prisma ve starších aplikacích: schema.prisma, prisma generate, prisma migrate deploy v buildu, Postgres. Vpravo Drizzle v nových aplikacích: schema.ts v TypeScriptu, drizzle-kit generate zapíše SQL soubor, nasazení ho spustí na Cloudflare D1. Patička: nové aplikace na Drizzlu, fungující aplikace s Prismou zůstávají.

Jak se změna schématu dostane do produkce?

Změna jde v každé nové aplikaci stejně. Nikdo nespouští SQL ručně proti produkci.

  1. Změna schématu v TypeScriptu

    Přidáte sloupec nebo tabulku v packages/db/src/schema. Typová kontrola označí každý dotaz, který už nesedí.

  2. Vygenerování migrace

    drizzle-kit generate zapíše očíslovaný SQL soubor do packages/db/src/migrations.

  3. Review SQL v PR

    Změna schématu a SQL soubor jdou spolu, takže reviewer čte skutečný příkaz.

  4. Nasazení ji spustí na D1

    Náš kód infrastruktury nasměruje D1 na složku s migracemi a při nasazení spustí nové soubory.

Strana nasazení je v našem kódu infrastruktury, v TypeScriptu s Alchemy:

// packages/infra/alchemy.run.ts (zkráceno)
const db = await D1Database('database', {
  migrationsDir: '../../packages/db/src/migrations',
})

const web = await TanStackStart('web', {
  cwd: '../../apps/web',
  bindings: { DB: db },
})

Jedna složka SQL souborů je celá historie databáze. I díky tomu je předání čitelné pro dalšího inženýra.

Kde Prisma pořád vyhrává a proč ji necháváme?

Několik starších klientských aplikací běží na Prismě a Postgresu, napříč několika hlavními verzemi Prismy. Jednou z nich je systém pro spediční firmu, který jsme postavili a provozujeme. Většina má klasické nastavení: prisma-client-js, NextAuth s adaptérem pro Prismu a prisma migrate deploy v build skriptu, takže každé nasazení nejdřív srovná databázi a až potom spustí next build.

Toto nastavení funguje. Jazyk modelů v Prismě se dobře čte i člověku, který nepíše SQL každý den, a její postup migrací je vyzrálý. Z aplikace, která dobře slouží uživatelům, ji nemáme důvod vyhazovat.

Výměna ORM zasáhne najednou každý dotaz, každý test a každou migraci a uživatel neuvidí nic nového. Toto riziko se vyplatí, jen když ho vynutí něco jiného, například přesun na Workers. Když přebíráme starší aplikaci, ORM bývá málokdy to první, co je potřeba opravit. Jak vybíráme, co jde první, píšeme v článku Technický dluh brzdí vývoj: jak ho změřit a co řešit první.

Ještě jedna upřímná poznámka: online marketplace jednoho klienta běží na MongoDB s Mongoose, takže tam není ani jedno z těchto ORM.

Co změnila Prisma 7?

Spousta srovnání „Drizzle vs Prisma“ se pořád hádá o binárku Rust enginu. Tento argument už slábne. Prisma ORM 7 vyšla 19. 11. 2025 a v changelogu stojí „Rust-free Prisma Client as the default“ (Prisma changelog, ověřeno 24. 10. 2026). Návod na upgrade říká:

Upgrade to the new prisma-client provider which uses the new Rust-free client.

Dokumentace Prismy
Upgrade na Prisma ORM 7 (ověřeno 24. 10. 2026)

Stejný návod říká, že driver adapter je teď povinný pro každou databázi. Prisma 7 tedy běží i na Workers a na D1 přes @prisma/adapter-d1. Stránka Prismy o D1 přidává upozornění, které platí pro každé ORM: D1 nepodporuje transakce, takže „implicit & explicit transactions will be ignored and run as individual queries“ (Prisma a Cloudflare D1, ověřeno 24. 10. 2026).

Upřímně: Drizzle proti Prismě 7 jsme neměřili a Prismu 7 na D1 jsme zatím nepoužili. Většina našich aplikací s Prismou je ještě na prisma-client-js, nový generátor prisma-client už používá jen ta nejnovější. Pokud je dnes srovnáváte, srovnávejte s Prismou 7, ne s verzí ze starých blogů.

Drizzle, nebo Prisma pro vaši další aplikaci?

Projděte si body. Čím víc z nich u vás platí, tím líp sedí Drizzle:

Ať vyberete cokoli, migrace držte v repozitáři a spouštějte je z nasazení, nikdy ručně. Pokud je na stole stejně přepis, přečtěte si nejdřív Refaktoring, nebo přepsat od nuly? Jak se rozhodnout.

Chcete webovou aplikaci s datovou vrstvou, kterou přečte i další inženýr?

Webové aplikace stavíme na tomto stacku, u nové práce Drizzle na D1, a aplikace s Prismou přebíráme bez přepisování toho, co funguje: vývoj webových aplikací na míru. AI dnes píše veškerý náš kód a za výsledek ručí senior. Od roku 2023 jsme dodali 15+ produkčních projektů.

Ozveme se do dvou pracovních dnů a společně vybereme, co vyřešíme jako první.

Pokud si chcete nejdřív promluvit, domluvte si meeting na 15 minut s Filipem.

O kterém ORM se právě hádá váš tým?

Ve zkratce

  • Používáme obě: Prismu na Postgresu ve starších aplikacích, Drizzle na Cloudflare D1 v každé nové.
  • Drizzle drží schéma v TypeScriptu a migrace jako SQL soubory, které jdou přes review.
  • Prisma 7 se zbavila Rust enginu, takže starý argument s binárkou už nerozhoduje.
  • Fungující aplikaci s Prismou nikdy nepřepisujeme jen kvůli změně ORM.

Časté otázky

Je Drizzle lepší než Prisma?

Obecně není lepší ani jedno. Drizzle sedí na serverless a edge prostředí jako Cloudflare Workers s D1, schéma drží v čistém TypeScriptu a je blízko SQL. Prisma sedí týmům, které chtějí vyšší klient, vlastní postup migrací a nástroje jako Prisma Studio, typicky na Postgresu.

Potřebuje Prisma ještě binárku Rust enginu?

Od Prisma ORM 7, vydané 19. 11. 2025, už ne. Nový generátor prisma-client používá klienta bez Rustu a pro každou databázi potřebuje driver adapter. Aplikace na prisma-client-js s Prismou 5 nebo 6 používají Rust engine výchozím způsobem.

Dá se Prisma použít s Cloudflare D1?

Ano, přes driver adapter @prisma/adapter-d1. Dokumentace Prismy upozorňuje, že D1 nepodporuje transakce, takže implicitní i explicitní transakce běží jako samostatné dotazy. Tento limit D1 platí pro každé ORM.

Máme fungující aplikaci s Prismou přepsat na Drizzle?

Většinou ne. Přepis datové vrstvy ve fungující aplikaci nese skutečné riziko a uživatelům nedá nic nového. Na Drizzle přecházíme u nové aplikace nebo když se mění prostředí, například na Cloudflare Workers.

Jak fungují migrace v Drizzlu?

Schéma změníte v TypeScriptu, drizzle-kit generate zapíše čistý SQL soubor s migrací a ten se spustí při nasazení. U nás jde SQL soubor přes code review ve stejném PR jako změna schématu.

Zeptejte se AI na tento článek

AI při odpovědi využije i naše další články a zkušenosti z reálných projektů.

ChatGPTClaudePerplexity
Engineering

Ostatní články

Rozhodnutí CTO

Claude Code pricing: cena pro tým, API a agenty

Claude Code pricing podle veřejného ceníku Anthropicu (říjen 2026): Pro, Max, Team seaty, Enterprise a API tokeny. Co se hodí vývojářům, na čem běží agent na pozadí a CI reviewer, a pojistky, které agentovi nedovolí projet rozpočet.

Rozhodnutí CTO

Alternativy k Vercelu: proč máme Vercel i Cloudflare

Vercel jsme nenahradili, práci jsme rozdělili. Next.js weby zůstávají na Vercelu, nové aplikace běží na Cloudflare Workers a D1, popsané v TypeScriptu přes Alchemy. Ceny se zdroji, naše konfigurace a zablokovaný deploy od AI agenta.

Rozhodnutí CTO

Better Auth vs Clerk: proč jsme si vybrali Better Auth

Better Auth vs Clerk se rozhoduje podle toho, kde žijí vaši uživatelé a session. Z NextAuth jsme v nových aplikacích přešli na Better Auth a Clerk jsme si nevybrali. Naše reálná konfigurace, pluginy v produkci, ceník Clerku a kdy je Clerk lepší volba.

Čas přestat plánovat a začít řešit.

Kontakt

  • Digitaliko s.r.o.
    Šípková 377/17
    958 03 Malé Uherce, Slovensko
  • Ozvěte se nám
    info@digitaliko.com
    +421 950 595 506
    WhatsApp