【问题标题】:Got an error while executing query {"statusCode":500,"error":"Internal Server Error","message":"syntax error at or near \")\""}执行查询时出错 {"statusCode":500,"error":"Internal Server Error","message":"\")\""} 处或附近的语法错误
【发布时间】:2021-11-17 21:16:41
【问题描述】:

我有一个带有主键地址的数据库

| Address               | other values...|
| ----------------------| -------------- |
| ed.nl                 | null           |
| spelletjes.nl         | null           |
| kinderspelletjes.nl   | null           |

我想编写一个请求,删除与我在数组中传递的地址匹配的行。

我的 missing-urls.js 文件中有这个

async function deleteMissingUrls(request, reply) {
  try {
    const addresses = request.body;
    const { rows } = await pg.query(formatQry.deleteByAddress, [addresses]);
    reply.send({
      total: rows.length,
      items: rows,
    });
  } catch (err) {
    log.error(`Error while deleting. ${err.message}`);
    reply.internalServerError(err.message);
  }
}

并在我的 query/missing-urls.js 文件中使用此查询

export const deleteByAddress = 'DELETE FROM metrics.missing_url WHERE address IN (?)';

当我运行这个请求时

curl -X DELETE -d '["ed.nl", "spelletjes.nl"]' -H "Content-Type: application/json" http://localhost:3000/api/missing/urls

我遇到了一个错误。

{"statusCode":500,"error":"Internal Server Error","message":"syntax error at or near \")\""}%

我做错了什么?

【问题讨论】:

  • 看起来您正在发送一个数组作为数据,然后在 query 调用中将该数组作为一个元素包含在另一个数组中。

标签: sql node.js postgresql curl


【解决方案1】:

您应该使用任何运算符column = any(?)

如果您使用 node-postgres 驱动程序,您的代码如下所示:

await pg.quert('DELETE FROM metrics.missing_url WHERE address = ANY($1)', [['address 1', 'address 2', ...]])

【讨论】:

  • 谢谢!这正是我要问的。非常适合我!
  • 我有一个问题当然超出了上一个问题的范围,但我希望你能回答。我该如何处理出现错误的情况?我的意思是,如果您将数组传递为 ["a"、"b"、"c"],但我的表仅包含行值 ["a"、"b"、"z"]。现在它只是删除 ["a", "b"] 并且不会抛出任何无法删除 "c" 的错误。
  • 您可以使用事务并获取删除项目的计数等于您可以提交的数组长度,否则您可以回滚事务
  • 或者你可以在删除前用条件选择,如果总长度等于数组长度你可以执行删除查询,否则你抛出
猜你喜欢
  • 2015-08-16
  • 1970-01-01
  • 2017-05-07
  • 2021-07-07
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多