Supabase
新数据库
了解 Drizzle
入门
新数据库 现有数据库
PostgreSQL Neon Vercel Postgres Supabase Xata PGLite Nile Bun SQL Gel MySQL PlanetScale TiDB SingleStore SQLite Turso Cloudflare D1 Bun SQLite Cloudflare Durable Objects Expo SQLite OP SQLite
Drizzle 和 Supabase 入门
本指南假定您熟悉
dotenv - 用于管理环境变量的包 - 点击此处阅读
tsx - 用于运行 TypeScript 文件的包 - 点击此处阅读
Supabase - 开源的 Firebase 替代品 - 在此阅读
基本文件结构
这是项目的基本文件结构。在 src/db
目录中,我们在 schema.ts
中定义了表。在 drizzle
文件夹中,包含 SQL 迁移文件和快照。
📦 <project root>
├ 📂 drizzle
├ 📂 src
│ ├ 📂 db
│ │ └ 📜 schema.ts
│ └ 📜 index.ts
├ 📜 .env
├ 📜 drizzle.config.ts
├ 📜 package.json
└ 📜 tsconfig.json
步骤 1 - 安装 postgres 包
npm i drizzle-orm postgres dotenv
npm i -D drizzle-kit tsx
yarn add drizzle-orm postgres dotenv
yarn add -D drizzle-kit tsx
pnpm add drizzle-orm postgres dotenv
pnpm add -D drizzle-kit tsx
bun add drizzle-orm postgres dotenv
bun add -D drizzle-kit tsx
步骤 2 - 设置连接变量
在项目的根目录中创建 .env
文件,并添加你的数据库连接变量
第 3 步 - 将 Drizzle ORM 连接到数据库
在 src
目录中创建 index.ts
文件并初始化连接
import { drizzle } from 'drizzle-orm'
async function main () {
const db = drizzle ( 'postgres-js' , process . env . DATABASE_URL );
}
main ();
如果您需要同步连接,可以使用我们额外的连接 API,您可以在其中指定驱动程序连接并将其传递给 Drizzle 实例。
import { drizzle } from 'drizzle-orm/postgres-js'
import postgres from 'postgres'
async function main () {
const client = postgres ( process . env . DATABASE_URL )
const db = drizzle ({ client });
}
main ();
提示
如果您决定通过 Supabase 使用连接池(在此描述 ),并且启用了“Transaction”池模式,请务必关闭 prepare,因为不支持预处理语句。
import { drizzle } from 'drizzle-orm/postgres-js'
import postgres from 'postgres'
async function main () {
// Disable prefetch as it is not supported for "Transaction" pool mode
const client = postgres ( process . env . DATABASE_URL , { prepare : false })
const db = drizzle ({ client });
}
main ();
第 4 步 - 创建表
在 src/db
目录中创建 schema.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 () ,
});
第 5 步 - 设置 Drizzle 配置文件
Drizzle config - 由 Drizzle Kit 使用的配置文件,包含有关你的数据库连接、迁移文件夹和 schema 文件的所有信息。
在项目的根目录中创建 drizzle.config.ts
文件并添加以下内容
import 'dotenv/config' ;
import { defineConfig } from 'drizzle-kit' ;
export default defineConfig ({
out : './drizzle' ,
schema : './src/db/schema.ts' ,
dialect : 'postgresql' ,
dbCredentials : {
url : process . env .DATABASE_URL ! ,
} ,
});
第 6 步 - 将更改应用于数据库
您可以使用 drizzle-kit push
命令直接将更改应用到数据库。这是一种在本地开发环境中快速测试新模式设计或修改的便捷方法,无需管理迁移文件,即可实现快速迭代。
npx drizzle-kit push
在文档 中阅读更多关于 push 命令的信息。
提示
或者,你可以使用 drizzle-kit generate
命令生成迁移,然后使用 drizzle-kit migrate
命令应用它们
生成迁移
npx drizzle-kit generate
应用迁移
npx drizzle-kit migrate
在文档 中阅读更多关于迁移过程的信息。
第 7 步 - 填充和查询数据库
让我们更新 src/index.ts
文件,添加创建、读取、更新和删除用户的查询
import 'dotenv/config' ;
import { drizzle } from 'drizzle-orm/postgres-js' ;
import { eq } from 'drizzle-orm' ;
import { usersTable } from './db/schema' ;
const db = drizzle ( process . env .DATABASE_URL ! );
async function main () {
const user : typeof usersTable .$inferInsert = {
name : 'John' ,
age : 30 ,
email : '[email protected] ' ,
};
await db .insert (usersTable) .values (user);
console .log ( 'New user created!' )
const users = await db .select () .from (usersTable);
console .log ( 'Getting all users from the database: ' , users)
/*
const users: {
id: number;
name: string;
age: number;
email: string;
}[]
*/
await db
.update (usersTable)
.set ({
age : 31 ,
})
.where ( eq ( usersTable .email , user .email));
console .log ( 'User info updated!' )
await db .delete (usersTable) .where ( eq ( usersTable .email , user .email));
console .log ( 'User deleted!' )
}
main ();
第 8 步 - 运行 index.ts 文件
要运行任何 TypeScript 文件,你有多种选择,但我们只使用一种:使用 tsx
你已经安装了 tsx
,所以我们现在可以运行查询了
运行 index.ts
脚本
npx tsx src/index.ts
yarn tsx src/index.ts
pnpm tsx src/index.ts
bun tsx src/index.ts
提示
我们建议使用 bun
运行 TypeScript 文件。使用 bun
,此类脚本可以无需额外设置即可执行,无论您的项目配置为 CommonJS (CJS)、ECMAScript Modules (ESM) 或任何其他模块格式。要使用 bun
运行脚本,请使用以下命令
bun src/index.ts
如果你没有安装 bun,请查看 Bun 安装文档