---
title: github-fill
description: 使用 Drizzle ORM 连接 OceanBase 数据库 功能适用性 Drizzle ORM 适用于 OceanBase 数据库 MySQL 模式。 Drizzle ORM 是一个轻量级、类型安全的 TypeScript ORM。本文将介绍如何使用 Drizzle ORM 连接 OceanBase 数据库的 M…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.3.5 LTS

# 使用 Drizzle ORM 连接 OceanBase 数据库

更新时间：2026-04-09 14:12:04

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.5/zh-CN/680.ecological-integration/200.orms-frameworks/600.nodejs/400.drizzle-connection-oceanbase-database-program.md)

#### 功能适用性

Drizzle ORM 适用于 OceanBase 数据库 MySQL 模式。

Drizzle ORM 是一个轻量级、类型安全的 TypeScript ORM。本文将介绍如何使用 Drizzle ORM 连接 OceanBase 数据库的 MySQL 模式。

## 前提条件

- 已安装 Node.js 16.0.0 或更高版本
 - 已安装 npm 或 yarn 包管理器
 - 已部署 OceanBase 数据库并且创建了 MySQL 模式租户

## 操作步骤

1. 检查 Node.js 和 npm 版本
 2. 安装必要的依赖
 3. 获取 OceanBase 数据库连接信息
 4. 创建并配置项目
 5. 运行示例程序

### 步骤一：检查 Node.js 和 npm 版本

打开终端，运行以下命令检查 Node.js 和 npm 的版本：

```bash
node -v
npm -v

```

### 步骤二：安装必要的依赖

```bash
mkdir drizzle-oceanbase-demo
cd drizzle-oceanbase-demo
npm init -y
npm install drizzle-orm mysql2
npm install -D typescript @types/node ts-node
npx tsc --init

```

## 步骤二：配置数据库连接

在项目根目录创建 `.env` 文件，填写数据库连接信息：

```env
DB_HOST=your_host
DB_PORT=2881
DB_USER=your_username
DB_PASSWORD=your_password
DB_NAME=your_database

```

## 步骤三：获取 OceanBase 数据库连接信息

联系 OceanBase 数据库部署人员或者管理员获取相应的数据库连接信息。

```bash
mysql -h$host -P$port -u$user_name -p$password -D$database_name

```

**参数说明：**

- `$host`：提供 OceanBase 数据库连接 IP
 - `$port`：提供 OceanBase 数据库连接端口
 - `$database_name`：需要访问的数据库名称
 - `$user_name`：提供租户的连接账户
 - `$password`：提供账户密码

## 步骤三：定义数据表模型

创建 `src/db/schema.ts`：

```typescript
import { mysqlTable, int, varchar, timestamp, index } from 'drizzle-orm/mysql-core';

export const users = mysqlTable('users', {
  id: int('id').primaryKey().autoincrement(),
  username: varchar('username', { length: 255 }).notNull(),
  email: varchar('email', { length: 255 }).notNull().unique(),
  passwordHash: varchar('password_hash', { length: 255 }).notNull(),
  createdAt: timestamp('created_at').defaultNow().notNull(),
  updatedAt: timestamp('updated_at').defaultNow().onUpdateNow().notNull(),
}, (table) => ({
// 添加 email 字段的索引
  emailIdx: index('email_idx').on(table.email),
}));

```

在 OceanBase 数据库中创建表：

```SQL
CREATE TABLE IF NOT EXISTS users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL UNIQUE,
  password_hash VARCHAR(255) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL
);

```

## 步骤四：创建数据库连接

创建 `src/db/index.ts`：

```typescript
import { drizzle } from 'drizzle-orm/mysql2';
import mysql from 'mysql2/promise';
import * as schema from './schema';
import * as dotenv from 'dotenv';

// Load environment variables
dotenv.config();

const poolConnection = mysql.createPool({
  host: process.env.DB_HOST,
  port: parseInt(process.env.DB_PORT || '2881'),
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_NAME,
  waitForConnections: true,
  connectionLimit: 10,
  queueLimit: 0,
  timezone: '+08:00',
// Add these options for better compatibility
  multipleStatements: true,
  supportBigNumbers: true,
  bigNumberStrings: true
});

console.log('Connecting to database at:', {
host: process.env.DB_HOST,
port: process.env.DB_PORT,
user: process.env.DB_USER,
database: process.env.DB_NAME
});

export const db = drizzle(poolConnection, {
  schema,
  mode: 'default'
});

```

## 步骤五：CRUD 操作示例

创建 `src/index.ts`：

```typescript
import { db } from './db';
import { users } from './db/schema';
import { eq } from 'drizzle-orm';

async function main() {
  try {
    // Test the connection first
    await db.select().from(users).limit(1);
    console.log('Successfully connected to the database');

    // Create user
    const insertResult = await db.insert(users).values({
      username: 'testuser',
      email: 'test@example.com',
      passwordHash: 'hashed_password',
    });
    console.log('Insert result:', insertResult);

    // Get the inserted user
    const [newUser] = await db.select().from(users).where(eq(users.email, 'test@example.com'));
    console.log('Created user:', newUser);

    // Query user
    const [user] = await db.select().from(users).where(eq(users.id, newUser.id));
    console.log('Retrieved user:', user);

    // Update user
    const updateResult = await db.update(users)
      .set({ email: 'new.email@example.com' })
      .where(eq(users.id, newUser.id));
    console.log('Update result:', updateResult);

    // Get the updated user
    const [updatedUser] = await db.select().from(users).where(eq(users.id, newUser.id));
    console.log('Updated user:', updatedUser);

    // Delete user
    const deleteResult = await db.delete(users)
      .where(eq(users.id, newUser.id));
    console.log('Delete result:', deleteResult);

    // Verify deletion
    const [deletedUser] = await db.select().from(users).where(eq(users.id, newUser.id));
    console.log('User after deletion:', deletedUser || 'User not found');
  } catch (error) {
    console.error('Database error:', error);
  }
}

main().catch(console.error);

```

## 运行示例

```bash
npx ts-node src/index.ts

```

## 相关文档

- [Drizzle ORM 官方文档](https://orm.drizzle.team/)
 - [Drizzle Kit 文档](https://orm.drizzle.team/kit-docs/overview)
 - [OceanBase 文档](https://www.oceanbase.com/docs)
 - [TypeScript 文档](https://www.typescriptlang.org/docs/)

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
