如何用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
相关产品推荐
相关产品推荐

