批处理 API

Drizzle 支持在具有 SQLite 兼容性的 libSQL 和 Cloudflare D1 驱动中批量运行 SQL 语句。

LibSQL 批处理 API 说明来源

使用 libSQL 客户端库时,批处理是一个或多个按顺序执行的 SQL 语句,且位于一个隐式事务中。 如果所有语句都成功,事务将被提交。如果任何语句失败,事务将回滚。

D1 批处理 API 说明来源

批处理会在一次调用中将多个 SQL 语句发送到数据库。这可以通过减少到 D1 的网络往返延迟来降低延迟。

const 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),
]);
libSQL
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()...,