Skip to content

drizzle

https://drizzle.zhcndoc.com/docs/get-started/postgresql-new

我的笔记 pg schema

pg(node-postgres)

sh
pnpm add drizzle-orm pg dotenv
pnpm add -D drizzle-kit tsx @types/pg

目录结构

📦 <project root>
 ├ 📂 drizzle
 ├ 📂 src
 │   ├ 📂 db
 │   │  └ 📜 schema.ts
 │   └ 📜 index.ts
 ├ 📜 .env
 ├ 📜 drizzle.config.ts
 ├ 📜 package.json
 └ 📜 tsconfig.json

drizzle 支持多种连接方式,这里只演示最简单的:

ts
import "dotenv/config";
import { drizzle } from "drizzle-orm/node-postgres";
const db = drizzle(process.env.DATABASE_URL!);

schema 与 drizzle.config.ts

schema 是 Entity 定义

drizzle.config.ts 是 drizzle kit 的配置文件,最常见的:将 schema push 到 数据库

ts
import { integer, pgTable, varchar } from "drizzle-orm/pg-core";
export const usersTable = pgTable("users", {
  id: integer().primaryKey().generatedAlwaysAsIdentity(),
  name: varchar({ length: 255 }).notNull(),
  age: integer().notNull(),
  email: varchar({ length: 255 }).notNull().unique(),
});
ts
import "dotenv/config";
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  out: "./drizzle",
  // schema 也可以是目录!
  schema: "./src/db/schema.ts",
  dialect: "postgresql",
  dbCredentials: {
    url: process.env.DATABASE_URL!,
  },
});
sh
npx drizzle-kit push

# 先 generate 再 migrate
npx drizzle-kit generate
npx drizzle-kit migrate

简单的 CRUD

ts
import "dotenv/config";
import { drizzle } from "drizzle-orm/node-postgres";
import { eq } from "drizzle-orm";
import { usersTable } from "./db/schema";

// 创建数据库实例
const db = drizzle(process.env.DATABASE_URL!);
ts
const user: typeof usersTable.$inferInsert = {
  name: "John",
  age: 30,
  email: "john@example.com",
};

await db.insert(usersTable).values(user);
console.log("New user created!");
ts
const users = await db.select().from(usersTable);
console.log("Getting all users from the database: ", users);
ts
await db.delete(usersTable).where(eq(usersTable.email, user.email));
console.log("User deleted!");