批量 API

LibSQL 批量 API 解释: 来源

使用 libSQL 客户端库时,批量处理是一个或多个按顺序在隐式事务中执行的 SQL 语句。事务由 libSQL 后端控制。如果所有语句都成功,则事务被提交。如果任何语句失败,则整个事务回滚,不进行任何更改。

D1 批量 API 解释: 来源

批量处理在一个数据库调用中发送多个 SQL 语句。这可以极大地影响性能,因为它减少了到 D1 的网络往返延迟。D1 在自动提交模式下运行。我们的实现保证列表中的每个语句都将按顺序、非并发地执行和提交。批量语句是 SQL 事务。如果序列中的某个语句失败,则该特定语句将返回错误,并中止或回滚整个序列。

Drizzle ORM 提供了用于 LibSQLNeonD1 的批量运行 SQL 语句的 API

const batchResponse: BatchResponse = await db.batch([
	db.insert(usersTable).values({ id: 1, name: 'John' }).returning({ id: usersTable.id }),
	db.update(usersTable).set({ name: 'Dan' }).where(eq(usersTable.id, 1)),
	db.query.usersTable.findMany({}),
	db.select().from(usersTable).where(eq(usersTable.id, 1)),
	db.select({ id: usersTable.id, invitedBy: usersTable.invitedBy }).from(usersTable),
]);

此示例中 batchResponse 的类型将是

libSQL
Neon
D1
type BatchResponse = [
	{
		id: number;
	}[],
	ResultSet,
	{
		id: number;
		name: string;
		verified: number;
		invitedBy: number | null;
	}[],
	{
		id: number;
		name: string;
		verified: number;
		invitedBy: number | null;
	}[],
	{
		id: number;
		invitedBy: number | null;
	}[],
]

所有可以在 db.batch 中使用的可能构建器

db.all(),
db.get(),
db.values(),
db.run(),
db.execute(),
db.query.<table>.findMany(),
db.query.<table>.findFirst(),
db.select()...,
db.update()...,
db.delete()...,
db.insert()...,