跳转到内容

Drizzle ORM 数据提供器

@svadmin/drizzle 提供基于 Drizzle ORM 的 DataProvider,由 refine-sqlx 驱动。无需 REST API,直接操作数据库。

Terminal window
bun add @svadmin/drizzle refine-sqlx drizzle-orm
数据库Drizzle 驱动运行时
SQLitedrizzle-orm/bun-sqliteBun
SQLitedrizzle-orm/better-sqlite3Node.js
PostgreSQLdrizzle-orm/postgres-jsBun / Node.js
MySQLdrizzle-orm/mysql2Node.js
Cloudflare D1drizzle-orm/d1Cloudflare Workers
import { createDrizzleDataProvider } from '@svadmin/drizzle';
import { drizzle } from 'drizzle-orm/bun-sqlite';
import { Database } from 'bun:sqlite';
import * as schema from './schema';
const db = drizzle(new Database('./app.db'), { schema });
const dataProvider = await createDrizzleDataProvider({
connection: db,
schema,
});

使用 Drizzle ORM 定义数据库结构:

schema.ts
import { sqliteTable, integer, text } from 'drizzle-orm/sqlite-core';
export const users = sqliteTable('users', {
id: integer('id').primaryKey({ autoIncrement: true }),
name: text('name').notNull(),
email: text('email').notNull(),
role: text('role').default('user'),
});
export const posts = sqliteTable('posts', {
id: integer('id').primaryKey({ autoIncrement: true }),
title: text('title').notNull(),
content: text('content'),
authorId: integer('author_id').references(() => users.id),
});
const dataProvider = await createDrizzleDataProvider({
connection: db,
schema,
softDelete: {
enabled: true,
field: 'deleted_at',
},
});
const dataProvider = await createDrizzleDataProvider({
connection: db,
schema,
features: {
relations: { enabled: true },
},
});
// 在 hooks 中使用:
const query = useOne({
resource: 'posts',
id: 1,
meta: { include: { author: true } },
});
const dataProvider = await createDrizzleDataProvider({
connection: db,
schema,
features: {
transactions: { enabled: true },
},
});
const dataProvider = await createDrizzleDataProvider({
connection: db,
schema,
features: {
aggregations: { enabled: true },
},
});
const dataProvider = await createDrizzleDataProvider({
connection: db,
schema,
security: {
allowedTables: ['users', 'posts'],
hiddenFields: { users: ['password', 'apiKey'] },
maxLimit: 1000,
allowedOperations: ['read', 'create', 'update'],
},
});
import { createDrizzleDataProvider } from '@svadmin/drizzle';
import { drizzle } from 'drizzle-orm/d1';
import * as schema from './schema';
export default {
async fetch(request: Request, env: Env) {
const db = drizzle(env.DB, { schema });
const dataProvider = await createDrizzleDataProvider({
connection: db,
schema,
});
// ...
},
};
interface RefineSQLConfig<TSchema> {
/** Drizzle ORM 实例 */
connection: VariableDrizzleDatabase<TSchema>;
/** Drizzle schema 定义 */
schema: TSchema;
/** 字段命名规范 — 默认: 'snake_case' */
casing?: 'camelCase' | 'snake_case' | 'none';
/** 启用查询日志 */
logger?: boolean;
/** 软删除配置 */
softDelete?: { enabled: boolean; field?: string };
/** 功能开关 */
features?: {
relations?: { enabled: boolean };
aggregations?: { enabled: boolean };
transactions?: { enabled: boolean };
};
/** 安全配置 */
security?: SecurityConfig;
}
特性@svadmin/drizzle@svadmin/supabase@svadmin/simple-rest
架构直接数据库访问Supabase APIREST API
依赖Drizzle ORMSupabase SDK无
类型安全Schema 级别运行时手动
软删除✅ 内置❌ 需手动❌ 需手动
关联查询✅ Drizzle relations✅ 外键❌ 不支持
事务✅ 内置❌ 不支持❌ 不支持
聚合查询✅ 内置❌ 需手动❌ 不支持
安全控制✅ 内置 Guard✅ RLS❌ API 层
离线 / 边缘✅ SQLite / D1❌ 仅云端取决于 API