Drizzle هو ORM يدعم كل من API "منشئ الاستعلامات" الشبيه بـ SQL و API الاستعلامات الشبيه بـ ORM. يدعم وحدة bun:sqlite المدمجة.
لنبدأ بإنشاء مشروع جديد باستخدام bun init وتثبيت Drizzle.
bun init -y
bun add drizzle-orm
bun add -D drizzle-kitثم سنقوم بالاتصال بقاعدة بيانات SQLite باستخدام وحدة bun:sqlite وإنشاء مثيل قاعدة بيانات Drizzle.
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.
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 وتنفيذ الاستعلام.
bun run index.ts{
text: "hello world"
}لنمنح قاعدة البيانات الخاصة بنا مخططًا صحيحًا. أنشئ ملف schema.ts وحدد جدول 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"),
});يمكننا استخدام سطر أوامر drizzle-kit لإنشاء ترحيل SQL أولي.
bunx drizzle-kit generate --dialect sqlite --schema ./schema.tsينشئ هذا دليل drizzle جديد يحتوي على ملف ترحيل .sql ودليل meta.
drizzle
├── 0000_ordinary_beyonder.sql
└── meta
├── 0000_snapshot.json
└── _journal.jsonيمكننا تنفيذ عمليات الترحيل هذه باستخدام نص migrate.ts بسيط.
ينشئ هذا النص اتصالاً جديدًا بقاعدة بيانات SQLite تكتب إلى sqlite.db، ثم ينفذ جميع عمليات الترحيل غير المنفذة في دليل 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" });يمكننا تشغيل هذا النص باستخدام bun لتنفيذ الترحيل.
bun run migrate.tsالآن بعد أن أصبح لدينا قاعدة بيانات، لنضف بعض البيانات إليها. أنشئ ملف seed.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 complete.`);ثم قم بتشغيل هذا الملف.
bun run seed.tsSeeding complete.أصبح لدينا أخيرًا قاعدة بيانات مع مخطط وبعض البيانات النموذجية. لنستخدم Drizzle للاستعلام عنها. استبدل محتويات index.ts بالتالي.
import * as schema from "./schema";
import { db } from "./db";
const result = await db.select().from(schema.movies);
console.log(result);ثم قم بتشغيل الملف. يجب أن ترى الأفلام الثلاثة التي أدخلناها.
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
}
]راجع موقع Drizzle للحصول على الوثائق الكاملة.