Skip to content

Commit

Permalink
feat: Add drizzle sample for javascript application
Browse files Browse the repository at this point in the history
  • Loading branch information
dengfuping committed Dec 2, 2024
1 parent beeb74f commit ec5281c
Show file tree
Hide file tree
Showing 8 changed files with 199 additions and 0 deletions.
1 change: 1 addition & 0 deletions applications/drizzle/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
DATABASE_URL="mysql://username:password@localhost:3306/test"
60 changes: 60 additions & 0 deletions applications/drizzle/README-CN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# 使用 Drizzle 连接 OceanBase

[English](README.md) | 简体中文

本文介绍如何通过 [Drizzle](https://orm.drizzle.team) 连接 [OceanBase](https://www.oceanbase.com) 数据库。

## 准备工作

确保 Node.js 和 npm 已经安装。

## 项目使用

拉取项目并进入相应目录:

```bash
git clone [email protected]:oceanbase/ob-samples.git
cd javascript/drizzle
```

安装依赖:

```bash
npm install
```

修改 `.env` 中的数据库连接串:

```bash
DATABASE_URL="mysql://username:password@localhost:3306/test"
```

`db/schema.ts` 中定义的 `users` 模型同步到数据库中:

```bash
npx drizzle-kit push
```

执行 `index.ts` 中的示例代码:

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

输出以下内容,说明执行成功:

```bash
[ { id: 1, email: '[email protected]', name: 'Alice' } ]
```
查看对应的 `users` 表,数据已正常插入:
```bash
mysql> select * from users;
+----+---------------------+-------+
| id | email | name |
+----+---------------------+-------+
| 1 | [email protected] | Alice |
+----+---------------------+-------+
1 row in set (0.01 sec)
```
60 changes: 60 additions & 0 deletions applications/drizzle/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# Connect to OceanBase with Drizzle

English | [简体中文](README-CN.md)

This document describes how to connect to [OceanBase](https://www.oceanbase.com) with [Drizzle](https://orm.drizzle.team).

## Preparation

Make sure `Node.js` and `npm` are installed.

## Usage

Clone the project and navigate to the appropriate directory:

```bash
git clone [email protected]:oceanbase/ob-samples.git
cd javascript/drizzle
```

Install dependencies:

```bash
npm install
```

Modify the connection string in the `.env` file:

```bash
DATABASE_URL="mysql://username:password@localhost:3306/test"
```

Synchronize the `users` model defined in `db/schema.ts` to the database:

```bash
npx drizzle-kit push
```

Execute `index.ts`:

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

The output should be as follows, indicating successful execution:

```bash
[ { id: 1, email: '[email protected]', name: 'Alice' } ]
```
Check the corresponding `users` table and the data has been inserted:
```bash
mysql> select * from users;
+----+---------------------+-------+
| id | email | name |
+----+---------------------+-------+
| 1 | [email protected] | Alice |
+----+---------------------+-------+
1 row in set (0.01 sec)
```
7 changes: 7 additions & 0 deletions applications/drizzle/db/schema.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { mysqlTable, serial, varchar } from "drizzle-orm/mysql-core";

export const usersTable = mysqlTable("users", {
id: serial().primaryKey(),
email: varchar({ length: 255 }).notNull().unique(),
name: varchar({ length: 255 }).notNull(),
});
11 changes: 11 additions & 0 deletions applications/drizzle/drizzle.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import "dotenv/config";
import { defineConfig } from "drizzle-kit";

export default defineConfig({
out: "./drizzle",
schema: "./db/schema.ts",
dialect: "mysql",
dbCredentials: {
url: process.env.DATABASE_URL!,
},
});
24 changes: 24 additions & 0 deletions applications/drizzle/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import "dotenv/config";
import { drizzle } from "drizzle-orm/mysql2";
import { usersTable } from "./db/schema";

const db = drizzle(process.env.DATABASE_URL!);

async function main() {
const user: typeof usersTable.$inferInsert = {
name: "Alice",
email: "[email protected]",
};
await db.insert(usersTable).values(user);

const allUsers = await db.select().from(usersTable);
console.log(allUsers);
}

main()
.then(() => {
process.exit(0);
})
.catch((err) => {
console.log(err);
});
23 changes: 23 additions & 0 deletions applications/drizzle/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"name": "drizzle",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "",
"dependencies": {
"dotenv": "^16.4.5",
"drizzle-orm": "^0.36.0",
"mysql2": "^3.11.3"
},
"devDependencies": {
"@types/node": "^22.8.5",
"drizzle-kit": "^0.27.0",
"ts-node": "^10.9.2",
"typescript": "^5.6.3"
}
}
13 changes: 13 additions & 0 deletions applications/drizzle/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"compilerOptions": {
"target": "es2016",
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"module": "commonjs",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"strictPropertyInitialization": false,
"skipLibCheck": true
}
}

0 comments on commit ec5281c

Please sign in to comment.