Waddler
由 drizzle team 构建
Waddler 是一个基于官方 DuckDB NodeJS 驱动的轻量级 SQL 客户端,它拥有受 postgresjs 启发并基于 ES6 标签模板字符串的现代 API。
npm
yarn
pnpm
bun
npm i waddler duckdb
import { waddler } from "waddler";
const sql = waddler({ dbUrl: ":memory:" });
await sql`select 1`;Waddler 内置了数据库连接池功能,这释放了 MotherDuck 等托管 DuckDB 服务的全部潜力。它在底层创建多个数据库实例,并允许您同时从远程 MotherDuck 数据库中获取数据。
import { waddler } from "waddler";
const sql = waddler({ dbUrl: "md:?…", min: 1, max: 8 }); // MotherDuck connection URL
// fetches concurrently
const res = await Promise.all([
sql`select 1`,
sql`select 2`,
]);Waddler API 由 sql 模板、sql.identifier、sql.values 和 sql.raw 操作符组成。
SQL 模板可保护您免受 SQL 注入攻击。
await sql`select * from users where id = ${10}`;select * from users where id = $1;
-- 10 will be passed as a param [10]SQL 标识符让您方便地为查询提供 schema、table 和 column 名称。这些名称将自动正确转义。
await sql`select * from ${sql.identifier("users")}`;
await sql`select * from ${sql.identifier({ schema: "public", table: "users" })}`;
const userIdColumn = sql.identifier({ schema: "public", table: "users", column: "id", as: "userId"});
await sql`select ${userIdColumn} from "users"`;select * from "users";
select * from "public"."users";
select * from "public"."users"."id" as "userId" from "users";SQL 值 API 旨在帮助您处理插入语句。
const tuples = [["Dan", 27], ["Oleksii", 25]];
await sql`insert into "users" ("name", "age") values ${sql.values(tuples)}`;insert into "users" ("name", "age") values ('Dan', 27), ('Oleksii', 25);SQL 原始语句允许您通过嵌入原始字符串来动态构建 SQL。
const listUsers = async (filter: string | undefined) => {
const whereClause = filter ? sql.raw(` where ${filter}`) : sql.raw("");
return sql`select * from "users"${whereClause}`;
}
await listUsers(`"id" = 10`);
await listUsers(`"name" = 'Dan'`);
await listUsers();select * from "users" where "id" = 10;
select * from "users" where "name" = 'Dan';
select * from "users";