Drizzle es un ORM que soporta tanto una API de "constructor de consultas" similar a SQL como una API de Consultas similar a ORM. Soporta el módulo incorporado bun:sqlite.
Comencemos creando un nuevo proyecto con bun init e instalando Drizzle.
bun init -y
bun add drizzle-orm
bun add -D drizzle-kitLuego nos conectaremos a una base de datos SQLite usando el módulo bun:sqlite y crearemos la instancia de base de datos de Drizzle.
import { drizzle } from "drizzle-orm/bun-sqlite";
import { Database } from "bun:sqlite";
const sqlite = new Database("sqlite.db");
export const db = drizzle(sqlite);Para ver la base de datos en acción, agrega estas líneas 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);Luego ejecuta index.ts con Bun. Bun creará automáticamente sqlite.db y ejecutará la consulta.
bun run index.ts{
text: "hello world"
}Demosle un esquema apropiado a nuestra base de datos. Crea un archivo schema.ts y define una tabla 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"),
});Podemos usar la CLI drizzle-kit para generar una migración SQL inicial.
bunx drizzle-kit generate --dialect sqlite --schema ./schema.tsEsto crea un nuevo directorio drizzle que contiene un archivo de migración .sql y el directorio meta.
drizzle
├── 0000_ordinary_beyonder.sql
└── meta
├── 0000_snapshot.json
└── _journal.jsonPodemos ejecutar estas migraciones con un script simple migrate.ts.
Este script crea una nueva conexión a una base de datos SQLite que escribe en sqlite.db, luego ejecuta todas las migraciones no ejecutadas en el directorio 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" });Podemos ejecutar este script con bun para ejecutar la migración.
bun run migrate.tsAhora que tenemos una base de datos, agreguemos algunos datos. Crea un archivo seed.ts con el siguiente contenido.
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(`Sembrado completo.`);Luego ejecuta este archivo.
bun run seed.tsSembrado completo.Finalmente tenemos una base de datos con un esquema y algunos datos de muestra. Usemos Drizzle para consultarla. Reemplaza el contenido de index.ts con lo siguiente.
import * as schema from "./schema";
import { db } from "./db";
const result = await db.select().from(schema.movies);
console.log(result);Luego ejecuta el archivo. Deberías ver las tres películas que insertamos.
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 el sitio web de Drizzle para documentación completa.