@drizzle-adapter/core

中文文档
1.1.1发布于 2026/03/26MITTypeScriptES Module近 30 天下载 2万

用于 Drizzle ORM 的 TypeScript- First Object 定向适配器层,提供跨越不同数据库驱动器的统一接口.

中文使用文档
文档目录11 节
  1. 概览
  2. 关键特性
  3. 安装
  4. 使用量
  5. 滴答音响
  6. 方法
  7. 用法示例
  8. 使用大小写
  9. 支持的驱动程序
  10. 捐款
  11. 相关软件包

@ 细雨适应器/ 核心

用于 Drizzle ORM 的 TypeScript- First Object 定向适配器层,提供跨越不同数据库驱动器的统一接口.

概览

这个 @drizzle-adapter/core 软件包充当了Drizzle ORM之上的抽象层,提供了一个统一接口,在不同的数据库驱动器之间一致工作。 这个抽象值允许您写出数据库不可知代码,可以不作修改地与任何支持的数据库系统工作.

关键的概念是,虽然Drizzle ORM中不同的数据库驱动程序可能提供不同的特性和稍有不同的API,但这个适配器层使这些差异正常化,确保您的代码在不同的数据库系统之间保持可移植性.

关键特性

  • 统一接口: 一次写出您的数据库代码并在不同的数据库之间切换,而不更改您的应用程序代码
  • 类型安全: 完整类型脚本支持并严格打字
  • 依赖性注射准备: 具有适合依赖性注射的接口的清洁建筑
  • 驱动数据: 支持多个数据库驱动程序,包括 MySQL, PostgreSQL, SQLite等
  • 一致 API: 不同数据库系统的接口标准化
  • 自动加载驱动程序: 自动加载和配置相应驱动程序的工厂模式

安装

pnpm install @drizzle-adapter/core

加您要使用的驱动程序专用软件包 :

pnpm install @drizzle-adapter/mysql2 # for MySQL
# or
pnpm install @drizzle-adapter/node-postgres # for PostgreSQL
# or
pnpm install @drizzle-adapter/libsql # for SQLite
# etc.

使用量

  1. 配置您的数据库连接 :
import { TypeDrizzleDatabaseConfig } from '@drizzle-adapter/core';

const config: TypeDrizzleDatabaseConfig = {
  DATABASE_DRIVER: 'mysql2', // or 'node-postgres', 'libsql', etc.
  DATABASE_URL: process.env.DATABASE_URL
};
  1. 使用核心工厂创建适配器实例 :
import { DrizzleAdapterFactory } from '@drizzle-adapter/core';

// The factory automatically loads the appropriate driver
const factory = new DrizzleAdapterFactory();
const adapter = factory.create(config);
  1. 定义您的方案 :
// The data types are abstracted, so this works with any database
const dataTypes = adapter.getDataTypes();

const users = dataTypes.dbTable('users', {
  id: dataTypes.dbSerial('id').primaryKey(),
  name: dataTypes.dbText('name').notNull(),
  email: dataTypes.dbText('email').notNull(),
  createdAt: dataTypes.dbTimestamp('created_at').defaultNow()
});
  1. 数据库操作使用适配器 :
import { eq } from 'drizzle-orm';

// Connect to the database (works the same for any driver)
const connection = await adapter.getConnection();

// Get the database client
const client = connection.getClient();

try {
  // All these operations work consistently across different databases
  
  // Insert
  await client.insert(users).values({
    name: 'John Doe',
    email: '[email protected]'
  });

  // Query
  const user = await client
    .select()
    .from(users)
    .where(eq(users.email, '[email protected]'))
    .limit(1);

  // Update
  await client
    .update(users)
    .set({ name: 'John Smith' })
    .where(eq(users.email, '[email protected]'));

  // Delete
  await client
    .delete(users)
    .where(eq(users.email, '[email protected]'));

} finally {
  // Always disconnect
  await connection.disconnect();
}
  1. 示例存储模式( Database Agnostic) :
import { DrizzleAdapterInterface, DrizzleClientInterface } from '@drizzle-adapter/core';
import { eq } from 'drizzle-orm';

interface User {
  id: number;
  name: string;
  email: string;
}

class UserRepository {
  private client: DrizzleClientInterface;
  private users: any; // Your users table schema

  constructor(private adapter: DrizzleAdapterInterface) {
    // Schema definition works the same regardless of the database
    const dataTypes = adapter.getDataTypes();
    this.users = dataTypes.dbTable('users', {
      id: dataTypes.dbSerial('id').primaryKey(),
      name: dataTypes.dbText('name').notNull(),
      email: dataTypes.dbText('email').notNull()
    });
  }

  async connect(): Promise<void> {
    const connection = await this.adapter.getConnection();
    this.client = connection.getClient();
  }

  async disconnect(): Promise<void> {
    await this.adapter.getConnection().disconnect();
  }

  async findById(id: number): Promise<User | null> {
    const result = await this.client
      .select()
      .from(this.users)
      .where(eq(this.users.id, id))
      .limit(1);
    
    return result[0] || null;
  }

  async create(user: Omit<User, 'id'>): Promise<User> {
    const result = await this.client
      .insert(this.users)
      .values(user)
      .returning();
    
    return result[0];
  }

  async update(id: number, data: Partial<Omit<User, 'id'>>): Promise<User | null> {
    const result = await this.client
      .update(this.users)
      .set(data)
      .where(eq(this.users.id, id))
      .returning();
    
    return result[0] || null;
  }

  async delete(id: number): Promise<void> {
    await this.client
      .delete(this.users)
      .where(eq(this.users.id, id));
  }
}

// Usage example (works with any database):
async function main() {
  const factory = new DrizzleAdapterFactory();
  
  // MySQL configuration
  const mysqlAdapter = factory.create({
    DATABASE_DRIVER: 'mysql2',
    DATABASE_URL: process.env.MYSQL_URL
  });

  // PostgreSQL configuration
  const pgAdapter = factory.create({
    DATABASE_DRIVER: 'node-postgres',
    DATABASE_URL: process.env.POSTGRES_URL
  });

  // The same repository works with any adapter
  const mysqlRepo = new UserRepository(mysqlAdapter);
  const pgRepo = new UserRepository(pgAdapter);

  // Use either repository - the code is exactly the same
  await mysqlRepo.connect();
  try {
    const user = await mysqlRepo.create({
      name: 'John Doe',
      email: '[email protected]'
    });
  } finally {
    await mysqlRepo.disconnect();
  }
}

滴答音响

这个 DrizzleAdapterSingleton class 执行 Singleton 设计模式,确保只使用一个实例 DrizzleAdapterInterface 可以存在。 这对管理整个应用程序的单个适配器实例很有用 .

方法

  • 静态( 静态 : DrizzleAdapter Interface QQ 未定义):设置适配器的单通实例.
  • 获取Instance (): 返回适配器的单通实例。 如果实例未设定, 则丢出错误 .

用法示例

import { DrizzleAdapterSingleton } from '@drizzle-adapter/core';
import type { DrizzleAdapterInterface } from '@drizzle-adapter/core';

// Setting the instance
DrizzleAdapterSingleton.setInstance(myAdapter);

// Getting the instance
const adapter = DrizzleAdapterSingleton.getInstance();

使用大小写

  • 全球接入: 使用 DrizzleAdapterSingleton 当您需要整个应用程序中全球可访问的适配器实例时.
  • 配置管理: 应用程序初始化期间设置适配器实例一次, 从代码库的任意位置访问, 而不绕过它 .

支持的驱动程序

Drizzle适应器生态系统包括下列适应器:

  • MySQL (英语:@drizzle-adapter/mysql2(中文(简体) )
  • PostgreSQL (英语:@drizzle-adapter/node-postgres, (中文(简体) ), @drizzle-adapter/postgres-js(中文(简体) )
  • SQLite (% 1 ) (@drizzle-adapter/libsql(中文(简体) )
  • 云花板 D1 (英语)@drizzle-adapter/d1(中文(简体) )
  • 神经元( Neon)@drizzle-adapter/neon-http(中文(简体) )
  • TiDB (@drizzle-adapter/tidb-serverless(中文(简体) )
  • PGLite (英语:@drizzle-adapter/pglite(中文(简体) )

捐款

欢迎捐款! 这就是你能帮助:

  1. 叉子存储器
  2. 创建您的特性分支( E)git checkout -b feature/amazing-feature(中文(简体) )
  3. 提交更改( E)git commit -m 'Add some amazing feature'(中文(简体) )
  4. 推向分行(git push origin feature/amazing-feature(中文(简体) )
  5. 打开拉请求

版本与发布记录

@drizzle-adapter/core 共发布 16 个版本,首次发布于 2024/12/03;过去 12 个月发布了 2 个版本。

版本发布日期距今
1.1.1latest2026/03/267 个月前
1.1.02026/03/267 个月前
1.0.142025/07/171.3 年前
1.0.122025/07/121.3 年前
1.0.112025/07/121.3 年前
1.0.102025/04/201.6 年前

关于 @drizzle-adapter/core 的常见问题

@drizzle-adapter/core 是什么?

用于 Drizzle ORM 的 TypeScript- First Object 定向适配器层,提供跨越不同数据库驱动器的统一接口.

如何安装 @drizzle-adapter/core?

在项目目录运行 npm install @drizzle-adapter/core,或使用 pnpm add / yarn add / bun add。

@drizzle-adapter/core 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@drizzle-adapter/core 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@drizzle-adapter/core 可以商用吗?

@drizzle-adapter/core 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@drizzle-adapter/core 的下载量有多少?

根据 npm 官方下载统计,@drizzle-adapter/core 在 2026/10/13 – 2026/11/11 这 30 天内被下载 20,462 次,日均约 682 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@drizzle-adapter/core 还在维护吗?

最新版本 1.1.1 发布于 2026/03/26(7 个月前);至今共发布 16 个版本,其中过去 12 个月发布了 2 个;首次发布于 2024/12/03。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。