reactjs Vercel Postgres批量插入,从数组动态构建SQL查询

x6492ojm  于 5个月前  发布在  React
关注(0)|答案(1)|浏览(64)

我试图从@vercel/postgres使用sql助手创建一个SQL批量插入查询。我打算从对象数组构建查询。对象具有数字/字符串/日期类型的属性。创建一个字符串并传递给sql助手将不起作用,我相信是由于参数化查询。所以,真的有什么方法可以动态地构建一个查询,并使用Vercel的Postgres包运行(而不使用ORM)吗?
我试过这样的方法,显然不起作用

import { sql } from "@vercel/postgres";

// Adds same charge for multiple users
export async function bulkInsert(userIds, charge) {
  const values = userIds.map((id) => `(${id}, ${charge.created_date}, ${charge.amount}, ${charge.note})`
  );

  await sql`INSERT INTO charges (user_id, date_created, amount, note)
            VALUES ${values.join(",")}`;
}

字符串

uz75evzq

uz75evzq1#

所以我认为sql.query()方法可以用于这种情况。在json_populate_recordset()的帮助下,我的代码现在看起来是这样的:

import { sql } from "@vercel/postgres";

// Adds same charge for multiple users
export async function bulkInsert(userIds, charge) {
  const arr = userIds.map((uid) => ({ ...charge, user_id: uid }));

  sql.query(
    `INSERT INTO charges (user_id, amount, note, created_at)
     SELECT user_id, amount, note, created_at FROM json_populate_recordset(NULL::charges, $1)`,
    [JSON.stringify(arr)]
  );

字符串
感谢@Bergi直接指向thisthat的答案,我在那里提到了解决这个问题。

相关问题