You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cloudflare D1(SQLite)批量插入遇类型错误,求正确实现方案

解决D1批量插入的类型错误及优化方案

错误原因

你遇到的D1_TYPE_ERROR: Type 'object' not supported是因为直接把数组传给了.bind()方法——D1的.bind()需要接收展开的单个参数,而非数组对象本身,直接传数组会被识别为不支持的对象类型。

修正原代码的写法

如果是固定数量的批量插入,只需将数组展开传入.bind()即可:

const items = [1,2,3,4]

await db
.prepare(`INSERT OR REPLACE INTO table_name (field1, field2) VALUES (?, ?), (?, ?)`)
.bind(...items) // 展开数组,将每个元素作为独立参数传入
.run();

更通用的动态批量插入方案

如果插入的条目数量不固定,推荐动态生成SQL占位符并平铺参数数组,适配任意数量的插入数据:

// 示例:多组待插入数据
const items = [
  [1, 2],
  [3, 4],
  [5, 6]
];

// 生成对应数量的(?, ?)占位符
const valuePlaceholders = items.map(() => '(?, ?)').join(', ');
const sql = `INSERT OR REPLACE INTO table_name (field1, field2) VALUES ${valuePlaceholders}`;

// 把二维数组平铺为一维,作为绑定参数
const flatParams = items.flat();

await db.prepare(sql).bind(...flatParams).run();

注意事项

  • D1单条SQL支持的最大参数数为999,若插入数据量远超这个值,需要拆分成分批次插入。
  • 确保传入的参数类型与表中字段类型匹配,避免额外的类型错误。

内容的提问来源于stack exchange,提问作者bryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:42:37