Drizzle Kit 的 export 命令会触发一系列事件:
- 它会读取你的 Drizzle schema 文件,并生成该 schema 的 json 快照
- 基于当前的 json 快照生成 SQL DDL 语句
- 将 SQL DDL 语句输出到控制台
drizzle-kit exportdrizzle-kit export 可让你导出 Drizzle schema 的 SQL 表示,并在控制台中打印其 SQL DDL 表示。
它在底层是如何工作的?
Drizzle Kit 的 export 命令会触发一系列事件:
它旨在支持管理 Drizzle migrations 的 codebase first 方法。 你可以导出 Drizzle schema 的 SQL 表示,让 Atlas 等外部工具为你处理所有迁移
drizzle-kit export 命令要求你同时提供 dialect 和 schema 路径选项,
你可以通过 drizzle.config.ts 配置文件设置它们,或者通过 CLI 选项设置
// drizzle.config.ts
import { defineConfig } from "drizzle-kit";
export default defineConfig({
dialect: "sqlite",
schema: "./src/schema.ts",
});npx drizzle-kit export你可以只有一个 schema.ts 文件,也可以将任意多个 schema 文件分散在整个项目中。
Drizzle Kit 要求你通过 schema 配置项以 glob 的形式指定它们的路径。
📦 <project root>
├ ...
├ 📂 drizzle
├ 📂 src
│ ├ ...
│ ├ 📜 index.ts
│ └ 📜 schema.ts
├ 📜 drizzle.config.ts
└ 📜 package.jsonimport { defineConfig } from "drizzle-kit";
export default defineConfig({
schema: "./src/schema.ts",
});你可以在项目中使用多个配置文件,当你有多个数据库阶段、多个数据库,或者同一项目中存在不同数据库时,这非常有用:
npx drizzle-kit export --config=drizzle-dev.config.ts
npx drizzle-kit export --config=drizzle-prod.config.ts
📦 <project root>
├ 📂 drizzle
├ 📂 src
├ 📜 .env
├ 📜 drizzle-dev.config.ts
├ 📜 drizzle-prod.config.ts
├ 📜 package.json
└ 📜 tsconfig.jsondrizzle-kit export 有一组仅 CLI 可用的选项
--sql | 生成 Drizzle Schema 的 SQL 表示 |
默认情况下,Drizzle Kit 输出 SQL 文件,但未来我们希望支持不同的格式
npx drizzle-kit export --sql=true
我们建议通过 drizzle.config.ts 文件来配置 drizzle-kit,
但如果有必要,例如在 CI/CD 流水线中等,你也可以通过 CLI 提供所有配置选项。
dialect | required | 数据库方言,以下之一 postgresql mysql sqlite turso singlestore mssql cockroach |
schema | required | Typescript schema 文件或包含多个 schema 文件的文件夹路径 |
config | 配置文件路径,默认为 drizzle.config.ts |
示例说明如何将 drizzle schema 导出到控制台,其中 Drizzle schema 位于 ./src/schema.ts
我们还将把 drizzle 配置文件放在 configs 文件夹中。
让我们创建配置文件:
📦 <project root>
├ 📂 configs
│ └ 📜 drizzle.config.ts
├ 📂 src
│ └ 📜 schema.ts
└ …import { defineConfig } from "drizzle-kit";
export default defineConfig({
dialect: "sqlite",
schema: "./src/schema.ts",
});import { sqliteTable, integer, text } from 'drizzle-orm/sqlite-core'
export const users = sqliteTable('users', {
id: integer().primaryKey({ autoIncrement: true }),
email: text().notNull(),
name: text()
});现在我们来运行
npx drizzle-kit export --config=./configs/drizzle.config.ts它将成功输出 drizzle schema 的 SQL 表示
CREATE TABLE `users` (
`id` integer PRIMARY KEY AUTOINCREMENT,
`email` text NOT NULL,
`name` text
);