INTEGRITY Документация

Drizzle ORM

Drizzle ORM ↗ представляет собой лёгкую ORM для TypeScript, ориентированную на типобезопасность. В этом примере показано, как использовать Drizzle ORM с PostgreSQL через Cloudflare Hyperdrive в приложении на Workers.

Предварительные требования

1. Установка Drizzle

Установите Drizzle ORM и его зависимости, такие как node-postgres ↗ (pg) драйвер:

npm i drizzle-orm pg dotenv
npm i -D drizzle-kit tsx @types/pg @types/node

Добавьте необходимые флаги совместимости Node.js и привязку Hyperdrive в свой wrangler.jsonc файле:

{
	// required for database drivers to function
	"compatibility_flags": [
		"nodejs_compat"
	],
	// Set this to today's date
	"compatibility_date": "2026-08-28",
	"hyperdrive": [
		{
			"binding": "HYPERDRIVE",
			"id": "<your-hyperdrive-id-here>"
		}
	]
}
compatibility_flags = [ "nodejs_compat" ]
# Set this to today's date
compatibility_date = "2026-08-28"

[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<your-hyperdrive-id-here>"

2. Настройка Drizzle

2.1. Определение схемы

В Drizzle ORM схема определяется на TypeScript, а не написанием SQL-запросов вручную.

  1. Создайте папку /db/ в /src/.

  2. Создайте schema.ts файл.

  3. В schema.ts, определите users таблицу, как показано ниже.

    src/db/schema.ts
    // src/db/schema.ts
    import { pgTable, serial, varchar, timestamp } from "drizzle-orm/pg-core";
    
    export const users = pgTable("users", {
    	id: serial("id").primaryKey(),
    	name: varchar("name", { length: 255 }).notNull(),
    	email: varchar("email", { length: 255 }).notNull().unique(),
    	createdAt: timestamp("created_at").defaultNow(),
    });

2.2. Подключение Drizzle ORM к базе данных через Hyperdrive

Используйте свою конфигурацию Hyperdrive для базы данных при работе с Drizzle ORM.

Заполните ваш index.ts файл, как показано ниже.

src/index.ts
// src/index.ts
import { Client } from "pg";
import { drizzle } from "drizzle-orm/node-postgres";
import { users } from "./db/schema";

export interface Env {
	HYPERDRIVE: Hyperdrive;
}

export default {
	async fetch(request, env, ctx): Promise<Response> {
		// Create a new client instance for each request.
		const client = new Client({
			connectionString: env.HYPERDRIVE.connectionString,
		});

		// Connect to the database
		await client.connect();

		// Create the Drizzle client with the node-postgres connection
		const db = drizzle(client);

		// Sample query to get all users
		const allUsers = await db.select().from(users);

		return Response.json(allUsers);
	},
} satisfies ExportedHandler<Env>;

2.3. Настройка Drizzle-Kit для миграций (необязательно)

С помощью Drizzle Kit CLI можно генерировать и выполнять SQL миграции базы данных на основе вашей схемы. См. Документация Drizzle ORM ↗ с дополнительными рекомендациями.

  1. Создайте .env файл в корневой папке проекта и добавьте в него строку подключения к базе данных. CLI Drizzle Kit будет использовать эту строку подключения для создания и применения миграций.

    .env
    # .env
    # Replace with your direct database connection string
    DATABASE_URL='postgres://user:[email protected]/database-name'
  2. Создайте drizzle.config.ts файл в корневой папке проекта, чтобы настроить Drizzle Kit, и добавьте в него следующее содержимое:

    drizzle.config.ts
    // drizzle.config.ts
    import "dotenv/config";
    import { defineConfig } from "drizzle-kit";
    export default defineConfig({
    	out: "./drizzle",
    	schema: "./src/db/schema.ts",
    	dialect: "postgresql",
    	dbCredentials: {
    		url: process.env.DATABASE_URL!,
    	},
    });
  3. Создайте файл миграции для базы данных на основе файлов схемы и примените миграции к базе данных.

    Выполните следующие две команды:

    npx drizzle-kit generate
    No config path provided, using default 'drizzle.config.ts'
    Reading config file 'drizzle.config.ts'
    1 tables
    users 4 columns 0 indexes 0 fks
    
    [✓] Your SQL migration file ➜ drizzle/0000_mysterious_queen_noir.sql 🚀
    npx drizzle-kit migrate
    No config path provided, using default 'drizzle.config.ts'
    Reading config file 'drizzle.config.ts'
    Using 'postgres' driver for database querying

3. Развертывание Worker

Разверните Worker.

npx wrangler deploy

Следующие шаги