drizzle
https://drizzle.zhcndoc.com/docs/get-started/postgresql-new
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.jsondrizzle 支持多种连接方式,这里只演示最简单的:
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!");