Drizzle ist ein ORM, das sowohl eine SQL-ähnliche "Query Builder"-API als auch eine ORM-ähnliche Queries API unterstützt. Es unterstützt das bun:sqlite-Built-in-Modul.
Lassen Sie uns beginnen, indem wir ein frisches Projekt mit bun init erstellen und Drizzle installieren.
bun init -y
bun add drizzle-orm
bun add -D drizzle-kitDann verbinden wir uns mit einer SQLite-Datenbank mithilfe des bun:sqlite-Moduls und erstellen die Drizzle-Datenbankinstanz.
import { drizzle } from "drizzle-orm/bun-sqlite";
import { Database } from "bun:sqlite";
const sqlite = new Database("sqlite.db");
export const db = drizzle(sqlite);Um die Datenbank in Aktion zu sehen, fügen Sie diese Zeilen zu index.ts hinzu.
import { db } from "./db";
import { sql } from "drizzle-orm";
const query = sql`select "hello world" as text`;
const result = db.get<{ text: string }>(query);
console.log(result);Dann führen Sie index.ts mit Bun aus. Bun wird automatisch sqlite.db erstellen und die Abfrage ausführen.
bun run index.ts{
text: "hello world"
}Lassen Sie uns unserer Datenbank ein richtiges Schema geben. Erstellen Sie eine schema.ts-Datei und definieren Sie eine movies-Tabelle.
import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";
export const movies = sqliteTable("movies", {
id: integer("id").primaryKey(),
title: text("name"),
releaseYear: integer("release_year"),
});Wir können die drizzle-kit-CLI verwenden, um eine initiale SQL-Migration zu generieren.
bunx drizzle-kit generate --dialect sqlite --schema ./schema.tsDies erstellt ein neues drizzle-Verzeichnis, das eine .sql-Migrationsdatei und ein meta-Verzeichnis enthält.
drizzle
├── 0000_ordinary_beyonder.sql
└── meta
├── 0000_snapshot.json
└── _journal.jsonWir können diese Migrationen mit einem einfachen migrate.ts-Skript ausführen.
Dieses Skript erstellt eine neue Verbindung zu einer SQLite-Datenbank, die in sqlite.db schreibt, und führt alle nicht ausgeführten Migrationen im drizzle-Verzeichnis aus.
import { migrate } from "drizzle-orm/bun-sqlite/migrator";
import { drizzle } from "drizzle-orm/bun-sqlite";
import { Database } from "bun:sqlite";
const sqlite = new Database("sqlite.db");
const db = drizzle(sqlite);
migrate(db, { migrationsFolder: "./drizzle" });Wir können dieses Skript mit bun ausführen, um die Migration auszuführen.
bun run migrate.tsJetzt, wo wir eine Datenbank haben, fügen wir einige Daten hinzu. Erstellen Sie eine seed.ts-Datei mit dem folgenden Inhalt.
import { db } from "./db";
import * as schema from "./schema";
await db.insert(schema.movies).values([
{
title: "The Matrix",
releaseYear: 1999,
},
{
title: "The Matrix Reloaded",
releaseYear: 2003,
},
{
title: "The Matrix Revolutions",
releaseYear: 2003,
},
]);
console.log(`Seeding abgeschlossen.`);Dann führen Sie diese Datei aus.
bun run seed.tsSeeding abgeschlossen.Wir haben endlich eine Datenbank mit einem Schema und einigen Beispieldaten. Lassen Sie uns Drizzle verwenden, um sie abzufragen. Ersetzen Sie den Inhalt von index.ts durch den folgenden.
import * as schema from "./schema";
import { db } from "./db";
const result = await db.select().from(schema.movies);
console.log(result);Dann führen Sie die Datei aus. Sie sollten die drei Filme sehen, die wir eingefügt haben.
bun run index.ts[
{
id: 1,
title: "The Matrix",
releaseYear: 1999
}, {
id: 2,
title: "The Matrix Reloaded",
releaseYear: 2003
}, {
id: 3,
title: "The Matrix Revolutions",
releaseYear: 2003
}
]Siehe Drizzle-Website für die vollständige Dokumentation.