跳至正文
Wener Notes

drizzle

约 2 分钟阅读
    • Apache-2.0, TS
    • 支持多环境 - Node, Bun, Deno
    • 支持新兴数据库 - libsql, Bun/Expo/OP SQLite, Cloudflare D1, Cloudflare Durable Objects, Vercel Postgres
    • 支持 Serverless 环境
    • 轻量级
    • drizzle-kit 提供辅助功能
  • /
    • drizzle.config.ts
    • drizzle/
    • src/db/schema/*.ts
  • 参考
bash
# PostgreSQL
npm add drizzle-orm pg
npm add -D drizzle-kit @types/pg
依赖包
TypeScript
import { pgTable, serial, text, varchar } from 'drizzle-orm/pg-core';
import { drizzle } from 'drizzle-orm/node-postgres';
import { Pool } from 'pg';

const pool = new Pool({
  connectionString: 'postgres://user:password@host:port/db',
});

// or
const pool = new Pool({
  host: '127.0.0.1',
  port: 5432,
  user: 'postgres',
  password: 'password',
  database: 'db_name',
});

const db = drizzle(pool);

MySQL

bash
# MySQL
npm add drizzle-orm mysql2
npm add -D drizzle-kit
依赖包
TypeScript
import { drizzle } from "drizzle-orm/mysql2";
import mysql from "mysql2/promise";

const poolConnection = mysql.createPool({
  host: "host",
  user: "user",
  database: "database",
  ...
});

const db = drizzle(poolConnection);

kit

bash
npx drizzle-kit generate --name base

SQLite

TypeScript
const myTab = {
  ts: integer('createdAt', { mode: 'timestamp_ms' }).default(sql`(STRFTIME('%s', 'now') * 1000)`),
  ts2: integer('createdAt', { mode: 'timestamp' }).default(sql`(STRFTIME('%s', 'now') * 1000)`),
  // with tz
  created_at: text('created_at').default(sql`(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))`).notNull()
};

FAQ

Dynamic Migration

运行时生成 DDL

TypeScript
// Dynamic require of "fs" is not supported.
const { createRequire } = await import('node:module');
global.require ||= createRequire(import.meta.url);

const { generateDrizzleJson, generateSQLiteMigration, generateSQLiteDrizzleJson, generateMigration } = await import(
  'drizzle-kit/api'
);

const schema = {
  article: WenerArticleTable,
};

const [previous, current] = await Promise.all(
  [{}, schema].map((schemaObject) => generateSQLiteDrizzleJson(schemaObject)),
);
const migrationStatements = await generateSQLiteMigration(previous, current);
console.log(`SQL`, migrationStatements.join('\n'));

关联信息

反向链接、本文链接的其他页面和外部资料。

参考资料

GitHub5 条
最近更新commit 3d5e006编辑