Skip to content

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.

sh
bun init -y
bun add drizzle-orm
bun add -D drizzle-kit

Poi ci connetteremo a un database SQLite usando il modulo bun:sqlite e creeremo l'istanza del database Drizzle.

ts
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.

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.

sh
bun run index.ts
txt
{
  text: "hello world"
}

Diamo al nostro database uno schema corretto. Crea un file schema.ts e definisci una tabella movies.

ts
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.

sh
bunx drizzle-kit generate --dialect sqlite --schema ./schema.ts

Questo crea una nuova directory drizzle contenente un file di migrazione .sql e la directory meta.

txt
drizzle
├── 0000_ordinary_beyonder.sql
└── meta
    ├── 0000_snapshot.json
    └── _journal.json

Possiamo 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.

ts
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.

sh
bun run migrate.ts

Ora che abbiamo un database, aggiungiamo dei dati. Crea un file seed.ts con il seguente contenuto.

ts
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.

sh
bun run seed.ts
txt
Seed 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.

ts
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.

sh
bun run index.ts
txt
[
  {
    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.

Bun a cura di www.bunjs.com.cn