Skip to content

Drizzle — это ORM, которая поддерживает как SQL-подобный "query builder" API, так и ORM-подобный Queries API. Она поддерживает встроенный модуль bun:sqlite.


Начнём с создания нового проекта с помощью bun init и установки Drizzle.

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

Затем подключимся к базе данных SQLite с помощью модуля bun:sqlite и создадим экземпляр базы данных 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);

Чтобы увидеть базу данных в действии, добавьте эти строки в 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);

Затем запустите index.ts с помощью Bun. Bun автоматически создаст sqlite.db и выполнит запрос.

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

Давайте предоставим нашей базе данных правильную схему. Создайте файл schema.ts и определите таблицу 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"),
});

Мы можем использовать CLI drizzle-kit для генерации начальной SQL миграции.

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

Это создаст новую директорию drizzle, содержащую файл миграции .sql и директорию meta.

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

Мы можем выполнить эти миграции с помощью простого скрипта migrate.ts.

Этот скрипт создаёт новое подключение к базе данных SQLite, которая записывает в sqlite.db, затем выполняет все невыполненные миграции в директории 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" });

Мы можем запустить этот скрипт с помощью bun для выполнения миграции.

sh
bun run migrate.ts

Теперь, когда у нас есть база данных, давайте добавим в неё некоторые данные. Создайте файл seed.ts со следующим содержимым.

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

await db.insert(schema.movies).values([
  {
    title: "Матрица",
    releaseYear: 1999,
  },
  {
    title: "Матрица: Перезагрузка",
    releaseYear: 2003,
  },
  {
    title: "Матрица: Революция",
    releaseYear: 2003,
  },
]);

console.log(`Заполнение данными завершено.`);

Затем запустите этот файл.

sh
bun run seed.ts
txt
Заполнение данными завершено.

Наконец, у нас есть база данных со схемой и некоторыми тестовыми данными. Давайте используем Drizzle для запроса к ней. Замените содержимое index.ts следующим.

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

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

Затем запустите файл. Вы должны увидеть три фильма, которые мы вставили.

sh
bun run index.ts
txt
[
  {
    id: 1,
    title: "Матрица",
    releaseYear: 1999
  }, {
    id: 2,
    title: "Матрица: Перезагрузка",
    releaseYear: 2003
  }, {
    id: 3,
    title: "Матрица: Революция",
    releaseYear: 2003
  }
]

Обратитесь к веб-сайту Drizzle для полной документации.

Bun от www.bunjs.com.cn