对于内置的带有 DDL 迁移的 migrate 功能,我们和驱动强烈建议你使用单个 client 连接。
在查询时,可以根据你的业务需求自由选择使用 client 或基于连接池的 pool。
要将 Drizzle 用于 SingleStore 数据库,您应使用 singlestore 驱动。
根据 官方网站,
mysql2 是一个专注于性能的 Node.js MySQL 客户端。
Drizzle ORM 原生支持 mysql2,并提供了用于 SingleStore 数据库的 drizzle-orm/singlestore 包。
这是项目的基本文件结构。在 src/db 目录中,我们在 schema.ts 中有表定义。在 drizzle 文件夹中,有 SQL 迁移文件和快照。
📦 <project root>
├ 📂 drizzle
├ 📂 src
│ ├ 📂 db
│ │ └ 📜 schema.ts
│ └ 📜 index.ts
├ 📜 .env
├ 📜 drizzle.config.ts
├ 📜 package.json
└ 📜 tsconfig.jsonnpm i drizzle-orm@rc mysql2 dotenv
npm i -D drizzle-kit@rc tsx
在你的项目根目录下创建一个 .env 文件,并添加你的数据库连接变量:
DATABASE_URL=在 src/db 目录下创建一个 index.ts 文件并初始化连接:
import 'dotenv/config';
import { drizzle } from "drizzle-orm/singlestore";
const db = drizzle(process.env.DATABASE_URL);对于内置的带有 DDL 迁移的 migrate 功能,我们和驱动强烈建议你使用单个 client 连接。
在查询时,可以根据你的业务需求自由选择使用 client 或基于连接池的 pool。
在 src/db 目录下创建一个 schema.ts 文件,并声明你的数据表:
import { int, singlestoreTable, varchar } from 'drizzle-orm/singlestore-core';
export const usersTable = singlestoreTable('users_table', {
id: int().primaryKey(),
name: varchar({ length: 255 }).notNull(),
age: int().notNull(),
email: varchar({ length: 255 }).notNull().unique(),
});Drizzle 配置 - 一个由 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: 'singlestore',
dbCredentials: {
url: process.env.DATABASE_URL!,
},
});你可以直接使用 drizzle-kit push 命令对数据库应用更改。这是一种方便的方法,可在本地开发环境中快速测试新的 schema 设计或修改,支持快速迭代,无需管理迁移文件:
npx drizzle-kit push在 文档 中阅读更多关于 push 命令的内容。
或者,你也可以使用 drizzle-kit generate 命令生成迁移,然后使用 drizzle-kit migrate 命令应用它们:
生成迁移:
npx drizzle-kit generate应用迁移:
npx drizzle-kit migrate在 文档 中阅读更多关于迁移流程的内容。
让我们更新 src/index.ts 文件,添加用于创建、读取、更新和删除用户的查询。
import 'dotenv/config';
import { drizzle } from 'drizzle-orm/singlestore';
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: 'john@example.com',
};
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();要运行任何 TypeScript 文件,你有几种选择,但我们这里先专注于一种:使用 tsx
你已经安装了 tsx,所以现在可以运行我们的查询了
运行 index.ts 脚本
npx tsx src/index.ts
我们建议使用 bun 来运行 TypeScript 文件。使用 bun,无论你的项目是配置为 CommonJS(CJS)、ECMAScript 模块(ESM)还是其他模块格式,这类脚本都可以顺利运行,无需额外设置或调整。
使用 bun 运行脚本,执行以下命令:
bun src/index.ts如果你还没有安装 bun,请查看 Bun 安装文档