Drizzle è un ORM che supporta sia un'API "query builder" simile a SQL sia un'API Queries API simile a un ORM. Supporta il modulo built-in bun:sqlite.
Iniziamo creando un nuovo progetto con bun init e installando Drizzle.
bun init -y
bun add drizzle-orm
bun add -D drizzle-kitPoi ci connetteremo a un database SQLite usando il modulo bun:sqlite e creeremo l'istanza del database Drizzle.
import { drizzle } from "drizzle-orm/bun-sqlite";
import { Database } from "bun:sqlite";
const sqlite = new Database("sqlite.db");
export const db = drizzle(sqlite);Per vedere il database in azione, aggiungi queste righe a index.ts.
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);Poi esegui index.ts con Bun. Bun creerà automaticamente sqlite.db ed eseguirà la query.
bun run index.ts{
text: "hello world"
}Diamo al nostro database uno schema corretto. Crea un file schema.ts e definisci una tabella movies.
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"),
});Possiamo usare la CLI drizzle-kit per generare una migrazione SQL iniziale.
bunx drizzle-kit generate --dialect sqlite --schema ./schema.tsQuesto crea una nuova directory drizzle contenente un file di migrazione .sql e la directory meta.
drizzle
├── 0000_ordinary_beyonder.sql
└── meta
├── 0000_snapshot.json
└── _journal.jsonPossiamo eseguire queste migrazioni con un semplice script migrate.ts.
Questo script crea una nuova connessione a un database SQLite che scrive su sqlite.db, poi esegue tutte le migrazioni non eseguite nella directory drizzle.
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" });Possiamo eseguire questo script con bun per eseguire la migrazione.
bun run migrate.tsOra che abbiamo un database, aggiungiamo dei dati. Crea un file seed.ts con il seguente contenuto.
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(`Seed completato.`);Poi esegui questo file.
bun run seed.tsSeed completato.Finalmente abbiamo un database con uno schema e alcuni dati di esempio. Usiamo Drizzle per fare query. Sostituisci il contenuto di index.ts con quanto segue.
import * as schema from "./schema";
import { db } from "./db";
const result = await db.select().from(schema.movies);
console.log(result);Poi esegui il file. Dovresti vedere i tre film che abbiamo inserito.
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
}
]Consulta il sito web Drizzle per la documentazione completa.