Drizzle <> SQLite
Drizzle 通过 libsql
和 better-sqlite3
驱动程序原生支持 SQLite 连接。
在使用 libsql
和 better-sqlite3
驱动程序并将其与 Drizzle ORM 集成时,我们发现两者之间存在一些差异。例如
在驱动层面上,两者之间可能没有太大差异,但主要区别在于 libSQL
可以连接到 SQLite 文件和 Turso 远程数据库。LibSQL 是 SQLite 的一个分支,与标准 SQLite 相比,它提供更多功能,例如
- 使用
libsql
驱动程序可以获得更多 ALTER 语句,使您比仅使用better-sqlite3
更容易管理模式。 - 您可以原生配置静态加密功能。
- SQLite 数据库支持的大量扩展也受
libSQL
支持。
libsql
步骤 1 - 安装包
npm
yarn
pnpm
bun
npm i drizzle-orm @libsql/client
npm i -D drizzle-kit
第 2 步 - 初始化驱动程序
Drizzle 原生支持所有 @libsql/client 驱动程序变体
@libsql/client | 默认为 node 导入,如果为打包器设置了 target 或 platform (例如 esbuild --platform=browser ),则自动更改为 web |
@libsql/client/node | node 兼容模块,支持 :memory: 、file 、wss 、http 和 turso 连接协议 |
@libsql/client/web | 用于 next 、nuxt 、astro 等全栈 Web 框架的模块 |
@libsql/client/http | 用于 http 和 https 连接协议的模块 |
@libsql/client/ws | 用于 ws 和 wss 连接协议的模块 |
@libsql/client/sqlite3 | 用于 :memory: 和 file 连接协议的模块 |
@libsql/client-wasm | 用于 WASM 的独立实验包 |
默认
node
web
http
Web Sockets
wasm
import { drizzle } from 'drizzle-orm/libsql';
const db = drizzle({ connection: {
url: process.env.DATABASE_URL,
authToken: process.env.DATABASE_AUTH_TOKEN
}});
第 3 步 - 执行查询
libsql
带配置的 libsql
import { drizzle } from 'drizzle-orm/libsql';
const db = drizzle(process.env.DATABASE_URL);
const result = await db.execute('select 1');
如果您需要同步连接,可以使用我们额外的连接 API,您可以在其中指定驱动程序连接并将其传递给 Drizzle 实例。
import { drizzle } from 'drizzle-orm/libsql';
import { createClient } from '@libsql/client';
const client = createClient({ url: process.env.DATABASE_URL, authToken: process.env.DATABASE_AUTH_TOKEN });
const db = drizzle(client);
const result = await db.execute('select 1');
better-sqlite3
第 1 步 - 安装包
npm
yarn
pnpm
bun
npm i drizzle-orm better-sqlite3
npm i -D drizzle-kit @types/better-sqlite3
步骤 2 - 初始化驱动程序并执行查询
better-sqlite3
带配置的 better-sqlite3
import { drizzle } from 'drizzle-orm/better-sqlite3';
const db = drizzle(process.env.DATABASE_URL);
const result = await db.execute('select 1');
如果您需要提供现有驱动程序
import { drizzle } from 'drizzle-orm/better-sqlite3';
import Database from 'better-sqlite3';
const sqlite = new Database('sqlite.db');
const db = drizzle({ client: sqlite });
const result = await db.execute('select 1');