Skip to content

Drizzle é um ORM que suporta tanto uma API de "query builder" semelhante a SQL quanto uma Queries API semelhante a ORM. Ele suporta o módulo nativo bun:sqlite.


Vamos começar criando um novo projeto com bun init e instalando o Drizzle.

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

Em seguida, conectaremos a um banco de dados SQLite usando o módulo bun:sqlite e criaremos a instância do banco de dados 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);

Para ver o banco de dados em ação, adicione estas linhas ao 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);

Em seguida, execute index.ts com Bun. O Bun criará automaticamente sqlite.db e executará a query.

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

Vamos dar um schema adequado ao nosso banco de dados. Crie um arquivo schema.ts e defina uma tabela 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"),
});

Podemos usar a CLI drizzle-kit para gerar uma migração SQL inicial.

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

Isso cria um novo diretório drizzle contendo um arquivo de migração .sql e um diretório meta.

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

Podemos executar essas migrações com um simples script migrate.ts.

Este script cria uma nova conexão com um banco de dados SQLite que grava em sqlite.db e executa todas as migrações não executadas no diretório 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" });

Podemos executar este script com bun para executar a migração.

sh
bun run migrate.ts

Agora que temos um banco de dados, vamos adicionar alguns dados a ele. Crie um arquivo seed.ts com o seguinte conteúdo.

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(`Seeding completo.`);

Em seguida, execute este arquivo.

sh
bun run seed.ts
txt
Seeding completo.

Finalmente temos um banco de dados com um schema e alguns dados de exemplo. Vamos usar o Drizzle para consultá-lo. Substitua o conteúdo de index.ts pelo seguinte.

ts
import * as schema from "./schema";
import { db } from "./db";

const result = await db.select().from(schema.movies);
console.log(result);

Em seguida, execute o arquivo. Você deve ver os três filmes que inserimos.

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
  }
]

Consulte o site do Drizzle para documentação completa.

Bun by www.bunjs.com.cn edit