Drizzle Kit 配置文件

本指南假定您已熟悉:

Drizzle Kit 允许你在 TypeScriptJavaScript 配置文件中声明配置选项。

📦 <project root>
 ├ ...
 ├ 📂 drizzle
 ├ 📂 src
 ├ 📜 drizzle.config.ts
 └ 📜 package.json
drizzle.config.ts
drizzle.config.js
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  dialect: "singlestore",
  schema: "./src/schema.ts",
  out: "./drizzle",
});

扩展配置文件示例

import { defineConfig } from "drizzle-kit";

export default defineConfig({
  out: "./drizzle",
  dialect: "singlestore",
  schema: "./src/schema.ts",

  dbCredentials: {
    url: "mysql://user:password@host:3306/dbname",
  },

  introspect: {
    casing: "camel",
  },

  migrations: {
    prefix: "timestamp",
    table: "__drizzle_migrations__",
  },

  breakpoints: true,
  strict: true,
  verbose: true,
});
Expand

多个配置文件

你可以在项目中拥有多个配置文件,当你有多个数据库阶段、多个数据库,或者同一项目中有不同数据库时,这会非常有用:

npm
yarn
pnpm
bun
npx drizzle-kit generate --config=drizzle-dev.config.ts
npx drizzle-kit generate --config=drizzle-prod.config.ts
📦 <project root>
 ├ 📂 drizzle
 ├ 📂 src
 ├ 📜 .env
 ├ 📜 drizzle-dev.config.ts
 ├ 📜 drizzle-prod.config.ts
 ├ 📜 package.json
 └ 📜 tsconfig.json

migrations 文件夹

out 参数允许你定义迁移文件所在的文件夹,它是可选的,默认值为 drizzle
当同一个项目中有多个数据库的多个独立 schema,并且它们需要不同的迁移文件夹时,这非常有用。

迁移文件夹包含带有 .sql 迁移文件的文件夹,这些文件会被 drizzle-kit 使用

📦 <project root>
 ├ ...
 ├ 📂 drizzle
 │ ├ 📂 20242409125510_premium_mister_fear
 │ ├ 📜 user.ts 
 │ ├ 📜 post.ts 
 │ └ 📜 comment.ts 
 ├ 📂 src
 ├ 📜 drizzle.config.ts
 └ 📜 package.json
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  dialect: "singlestore", // "mysql" | "sqlite" | "postgresql" | "turso" | "singlestore" | "mssql"
  schema: "./src/schema/*",
  out: "./drizzle",
});

---

dialect

数据库的方言类型

typepostgresql mysql sqlite turso singlestore mssql cockroach
default
commandsgenerate migrate push pull check up
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  dialect: "mysql", 
});

schema

glob 基于路径的 drizzle schema 文件或文件夹路径。

typestring string[]
default
commandsgenerate push
Example 1
Example 2
Example 3
Example 4
📦 <project root>
 ├ ...
 ├ 📂 drizzle
 ├ 📂 src
 │ ├ ...
 │ ├ 📜 index.ts
 │ └ 📜 schema.ts 
 ├ 📜 drizzle.config.ts
 └ 📜 package.json
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  schema: "./src/schema.ts",
});

out

定义 SQL migration 文件、schema 的 json 快照以及来自 drizzle-kit pull 命令的 schema.ts 的输出文件夹。

typestring string[]
defaultdrizzle
commandsgenerate migrate push pull check up
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  out: "./drizzle", 
});

driver

Drizzle Kit 会根据当前项目中的 dialect: "singlestore" 自动选择一个可用的 SingleStore 驱动。 SingleStore 使用与 MySQL 兼容的连接参数,因此通常不需要单独设置 driver 选项。

type
default
commandsmigrate push pull

---

dbCredentials

urluser:password@host:port/db 参数形式或特定于方言的驱动程序(aws-data-api d1-http pglite )连接选项形式提供的数据库连接凭据。

typedriver 连接选项的联合类型
default
commandsmigrate push pull
Connection string
Connection params
import { defineConfig } from 'drizzle-kit'

export default defineConfig({
  dialect: "singlestore",
  dbCredentials: {
    url: "mysql://user:password@host:3306/db",
  }
});

migrations

当运行 drizzle-kit migrate 时,drizzle 会将已成功应用的迁移记录到数据库中名为 __drizzle_migrations 的日志表里。

migrations 配置选项允许你更改迁移日志 table 的名称。

type{ table: string }
default{ table: "__drizzle_migrations" }
commandsmigrate
export default defineConfig({
  dialect: "singlestore",
  schema: "./src/schema.ts",
  migrations: {
    table: 'my-migrations-table', // 默认为 `__drizzle_migrations`
  },
});

introspect

drizzle-kit pull 命令的配置。

casing 负责代码中列键名的大小写形式

type{ casing: "preserve" | "camel" }
default{ casing: "camel" }
commandspull
camel
preserve
import * as p from "drizzle-orm/singlestore-core"

export const users = p.singlestoreTable("users", {
  id: p.int().primaryKey().autoincrement(),
  firstName: p.varchar("first-name", { length: 255 }),
  lastName: p.varchar("LastName", { length: 255 }),
  email: p.varchar("email", { length: 255 }),
  phoneNumber: p.varchar("phone_number", { length: 255 }),
});
SHOW COLUMNS FROM users;
  Field        | Type
--------------+--------------
 id           | int
 first-name   | varchar(255)
 LastName     | varchar(255)
 email        | varchar(255)
 phone_number | varchar(255)

---

tablesFilter

如果你想使用一个数据库运行多个项目,请查看 我们的指南

drizzle-kit pushdrizzle-kit pull 默认会管理所有表。 你可以通过 tablesFilter 配置表列表。

tablesFilter 选项允许你指定基于 glob 的表名过滤器,例如 ["users", "user_info"]"user*"

typestring string[]
default
commandsgenerate push pull
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  dialect: "singlestore",
  tablesFilter: ["users", "posts", "project1_*"],
});

---

strict

在运行 drizzle-kit push 命令时,提示确认是否运行已打印的 SQL 语句。

typeboolean
defaultfalse
commandspush
export default defineConfig({
  dialect: "singlestore",
  strict: false,
});

verbose

drizzle-kit push 命令期间打印所有 SQL 语句。

typeboolean
defaulttrue
commandsgenerate pull
export default defineConfig({
  dialect: "singlestore",
  verbose: false,
});

breakpoints

Drizzle Kit 会自动将 --> statement-breakpoint 嵌入到生成的 SQL 迁移文件中,
这对于不支持在一个事务中执行多个 DDL 变更语句的数据库是必要的(MySQL 和 SQLite)。

breakpoints 选项标志可让你将其开启或关闭

typeboolean
defaulttrue
commandsgenerate pull
export default defineConfig({
  dialect: "singlestore",
  breakpoints: false,
});