Drizzle ORM für TypeScript: Komplette Anleitung mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Drizzle ORM für TypeScript: Das vollständige Handbuch

1. Was ist Drizzle ORM und warum braucht man es?

Drizzle ORM ist eine moderne, schlanke und type-safe ORM-Bibliothek (Object-Relational Mapping) für TypeScript und JavaScript. Im Gegensatz zu schwergewichtigen ORMs wie TypeORM oder Sequelize wurde Drizzle mit Fokus auf Leistung, Vorhersagbarkeit und vollständige Integration in das TypeScript-Typsystem entwickelt. Es versucht nicht, SQL zu verstecken, sondern bietet eine bequeme und typsichere Möglichkeit, SQL-Abfragen zu schreiben, während die volle Kontrolle über den generierten Code erhalten bleibt.

Die Hauptaufgabe von Drizzle besteht darin, Entwickler vom Schreiben roher SQL-Strings und der manuellen Typisierung von Abfrageergebnissen zu befreien. Sie beschreiben das Datenbankschema in TypeScript-Code, und Drizzle leitet automatisch die Typen für alle Tabellen, Beziehungen und Abfragen ab. Das bedeutet, dass Fehler durch falsche Spaltennamen, falsche Datentypen oder fehlende Felder bereits zur Kompilierzeit und nicht erst zur Laufzeit erkannt werden. Die Bibliothek unterstützt PostgreSQL, MySQL, SQLite und andere gängige Datenbanken.

Drizzle ist ideal für Projekte, bei denen Leistung und Kontrolle über SQL wichtig sind, aber der Komfort eines ORMs (Autovervollständigung in der IDE, Typprüfung und deklarative Schemabeschreibung) gewünscht wird. Es wird häufig in Kombination mit Next.js, NestJS, Express und anderen Frameworks verwendet. Dank seiner Leichtigkeit (ca. 7KB gzipped) und dem Verzicht auf Magie ist Drizzle eine ausgezeichnete Wahl sowohl für kleine Projekte als auch für große Enterprise-Anwendungen.

2. Installation

Die Installation von Drizzle ORM und seinem CLI-Tool (Drizzle Kit) erfolgt über npm oder yarn. Die Wahl des Treibers hängt von der verwendeten Datenbank ab.

# Für PostgreSQL
npm install drizzle-orm pg
npm install -D drizzle-kit @types/pg

# Für MySQL
npm install drizzle-orm mysql2
npm install -D drizzle-kit @types/node

# Für SQLite
npm install drizzle-orm better-sqlite3
npm install -D drizzle-kit @types/better-sqlite3

Nach der Installation muss eine Konfigurationsdatei drizzle.config.ts für Drizzle Kit erstellt werden:

import type { Config } from "drizzle-kit";

export default {
  schema: "./src/db/schema.ts",
  out: "./drizzle",
  dialect: "postgresql", // oder "mysql", "sqlite"
  dbCredentials: {
    url: process.env.DATABASE_URL!,
  },
} satisfies Config;

3. Schnellstart

Ein minimales funktionierendes Beispiel für PostgreSQL. Zuerst wird das Schema definiert, dann die Verbindung hergestellt und eine Abfrage ausgeführt.

// src/db/schema.ts
import { pgTable, serial, text, integer } from "drizzle-orm/pg-core";

export const users = pgTable("users", {
  id: serial("id").primaryKey(),
  name: text("name").notNull(),
  age: integer("age"),
});

// src/index.ts
import { drizzle } from "drizzle-orm/node-postgres";
import { Pool } from "pg";
import { users } from "./db/schema";
import { eq } from "drizzle-orm";

const pool = new Pool({
  connectionString: process.env.DATABASE_URL,
});

const db = drizzle(pool);

async function main() {
  // Daten einfügen
  const newUser = await db.insert(users).values({
    name: "Alice",
    age: 30,
  }).returning();
  console.log("Erstellter Benutzer:", newUser);

  // Daten abfragen
  const allUsers = await db.select().from(users);
  console.log("Alle Benutzer:", allUsers);

  // Abfrage mit Bedingung
  const user = await db.select()
    .from(users)
    .where(eq(users.name, "Alice"));
  console.log("Gefundener Benutzer:", user);
}

main().catch(console.error);

4. Wichtige Methoden und Funktionen

Nachfolgend sind die wichtigsten Methoden von Drizzle ORM mit Signaturen und Beispielen aufgeführt.

4.1 drizzle(client)

Empfehlungen