我可以链接Knex Raw命令吗?

时间:2019-05-03 12:42:51

标签: knex.js

我正在使用knex.raw在Postgres ON CONFLICT上插入行...我想插入多个行,例如batchInsert。如何链接原始报表? TypeScript界面​​建议您不要这样做。

我当前的实现使用了forEach + await(承诺),这显然使许多远程调用成为可能。

const data = [
  { ref : 'A', name : 'My A' },
  { ref : 'B', name : 'My B' },
  { ref : 'C', name : 'My C' }
];

await items.forEach(async (item) => {
    const insert = trx.table('myTable').insert({'ref': item.ref, 'name' : item.name}).toSQL();
    const onConflict = 'ON CONFLICT ON CONSTRAINT myTable_pkey DO NOTHING';
    await trx.raw(`${insert.sql} ${onConflict}`, insert.bindings);
}

1 个答案:

答案 0 :(得分:0)

不,您不能链接原始查询...每个原始查询都是一个查询。但是,您想通过链接实现哪种查询?为什么你不能做:

const insert = trx.table('myTable').insert(items).toSQL();
const onConflict = 'ON CONFLICT ON CONSTRAINT myTable_pkey DO NOTHING';
await trx.raw(`${insert.sql} ${onConflict}`, insert.bindings);