批量 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()...,