SQLocal 使用教程
项目介绍
SQLocal 是一个开源项目,旨在简化在浏览器中运行 SQLite3 数据库的过程,其数据存储在源私有文件系统中。该项目支持通过参数化语句执行 SQL 命令,并且可以与 Kysely 或 Drizzle ORM 集成,实现类型安全的查询。
项目快速启动
安装
首先,使用包管理器安装 SQLocal 包:
npm install sqlocal
# 或者
yarn add sqlocal
# 或者
pnpm install sqlocal
基本使用
以下是一个简单的示例,展示如何在浏览器中使用 SQLocal 创建表并插入数据:
import { SQLocal } from 'sqlocal';
// 初始化 SQLocal
const sql = new SQLocal('database.sqlite3');
// 创建表
await sql`CREATE TABLE groceries (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)`;
// 插入数据
const items = ['bread', 'milk', 'rice'];
for (let item of items) {
await sql`INSERT INTO groceries (name) VALUES (${item})`;
}
// 查询数据
const data = await sql`SELECT * FROM groceries`;
console.log(data);
// 输出:
// [ { id: 1, name: 'bread' }, { id: 2, name: 'milk' }, { id: 3, name: 'rice' } ]
应用案例和最佳实践
应用案例
SQLocal 适用于需要在浏览器中进行本地数据存储的场景,例如:
- 离线应用的数据存储
- 需要频繁读写的小型数据库应用
- 前端开发中的数据模拟
最佳实践
- 使用参数化查询:避免 SQL 注入攻击,确保数据安全。
- 合理设计数据库结构:根据应用需求设计合适的数据库表结构。
- 定期备份数据:虽然数据存储在本地,但定期备份可以防止数据丢失。
典型生态项目
SQLocal 可以与以下生态项目集成,提供更强大的功能:
- Kysely:一个类型安全的 SQL 查询构建器。
- Drizzle ORM:一个轻量级的 ORM,支持 SQLite。
与 Kysely 集成
import { SQLocalKysely } from 'sqlocal/kysely';
import { Kysely, Generated } from 'kysely';
// 初始化 SQLocalKysely 并传递方言给 Kysely
const { dialect } = new SQLocalKysely('database.sqlite3');
const db = new Kysely<DB>({ dialect });
// 定义你的 schema
type DB = {
groceries: {
id: Generated<number>;
name: string;
};
};
// 进行类型安全的查询
const data = await db.selectFrom('groceries').select('name').orderBy('name', 'asc').execute();
console.log(data);
与 Drizzle ORM 集成
import { SQLocalDrizzle } from 'sqlocal/drizzle';
import { drizzle } from 'drizzle-orm/sqlite-proxy';
import { sqliteTable, int, text } from 'drizzle-orm/sqlite-core';
// 初始化 SQLocalDrizzle 并传递驱动给 Drizzle
const { driver } = new SQLocalDrizzle('database.sqlite3');
const db = drizzle(driver);
// 定义你的 schema
const groceries = sqliteTable('groceries', {
id: int('id').primaryKey({ autoIncrement: true }),
name: text('name').notNull(),
});
// 进行类型安全的查询
const data = await db.select({ name: groceries.name }).from(groceries).orderBy(groceries.name).all();
console.log(data);
通过以上教程,您可以快速上手并深入了解 SQLocal 的使用方法和最佳实践。