You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Drizzle Query Builder创建并执行Better-SQLite3查询(TypeScript)

使用Better-SQLite3执行Drizzle ORM构建的查询

你已经通过toSQL()拿到了原始SQL和参数,接下来可以直接用Better-SQLite3的API执行,步骤如下:

1. 确保已初始化Better-SQLite3数据库实例

首先需要创建好数据库连接,示例代码:

import Database from 'better-sqlite3';

const db = new Database('./your-database.db'); // 替换为你的数据库文件路径

2. 编译并执行查询

利用拿到的sql和params,通过Better-SQLite3的prepare()方法编译语句,再根据查询类型选择对应执行方法:

import { qb, users, eq } from './your-drizzle-config'; // 替换为你的Drizzle配置路径

// 构建查询
const query = qb.select().from(users).where(eq(users.id, 1));

// 获取原始SQL和参数
const { sql, params } = query.toSQL();

// 编译SQL语句
const stmt = db.prepare(sql);

// 执行查询:按ID查询用get()获取单条结果
const user = stmt.get(...params) as typeof users.$inferSelect;
// 若需批量查询,改用all()获取结果数组
// const usersList = stmt.all(...params) as typeof users.$inferSelect[];

console.log(user);

关键方法说明

  • prepare(sql):编译SQL语句,返回可重复执行的语句对象
  • get(...params):执行查询并返回第一条结果,适合单条数据查询场景
  • all(...params):执行查询并返回所有结果数组,适合批量查询
  • run(...params):用于执行非查询语句(如INSERT/UPDATE/DELETE),返回包含变更行数等信息的对象

注意事项

  • TypeScript类型:通过typeof users.$inferSelect可自动获取Drizzle定义的表结构类型,无需手动声明
  • 参数传递:用扩展运算符...params传入参数,Better-SQLite3会自动处理参数绑定,避免SQL注入

内容的提问来源于stack exchange,提问作者Matheus Santos Araújo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 19:49:51