当前位置: 首页 > 面试题库 >

node-postgres:如何执行“ WHERE col IN()”查询?

魏安宁
2023-03-14
问题内容

我正在尝试执行这样的查询:

SELECT * FROM table WHERE id IN (1,2,3,4)

问题是我要过滤的ID列表不是恒定的,并且每次执行时都必须不同。我还需要转义这些id,因为它们可能来自不受信任的来源,尽管我实际上将转义查询中的所有内容,而不管该来源的可信度如何。

节点的Postgres似乎与绑定参数专门工作:client.query('SELECT * FROM table WHERE id = $1', [ id ]); 如果我具有已知数量的值(client.query('SELECT * FROM table WHERE id IN ($1, $2, $3)', [ id1, id2, id3 ])),这将起作用,但不能直接用于数组:client.query('SELECT * FROM table WHERE id IN ($1)', [ arrayOfIds ]),因为似乎对数组参数没有任何特殊处理。

根据数组中的项目数动态构建查询模板,然后将ids数组扩展到查询参数数组(在我的实际情况下,该数组除了id列表之外还包含其他参数)似乎是不合理的负担。硬编码查询模板中的ID列表似乎也不可行,因为node-
postgres不提供任何值转义方法。

这似乎是一个非常常见的用例,所以我的猜测是我实际上正在忽略某些东西,而不是不可能将公共IN (values)SQL运算符与node-
postgres一起使用。

如果有人以比我上面列出的方法更优雅的方式解决了这个问题,或者如果我真的缺少有关node-postgres的知识,请提供帮助。


问题答案:

我们之前在github问题列表上已经看到了这个问题。正确的方法是根据数组动态生成参数列表。像这样:

var arr = [1, 2, "hello"];
var params = [];
for(var i = 1; i <= arr.length; i++) {
  params.push('$' + i);
}
var queryText = 'SELECT id FROM my_table WHERE something IN (' + params.join(',') + ')';
client.query(queryText, arr, function(err, cb) {
 ...
});

这样,您就可以将postgres参数化转义。



 类似资料:
  • node.js 的非阻塞 PostgreSQL 客户端。支持纯JavaScript和本地libpq库绑定两种方式。开发活跃,测试良好,适用于生产环境。 特性: 纯Javascript和本地libpq库绑定使用相同的api 充分的测试 纯JavaScript和libpq绑定都通过超过200个的集成测试 发布前完成基准和长时间内存泄漏测试 postgres 8.x, 9.x Linux, OS X n

  • 问题内容: 我需要从批处理文件执行SQL。我正在执行以下操作以连接到Postgres并从表中选择数据 我能够连接到数据库,但是出现错误 “选择”不被识别为内部或外部命令,可操作程序或批处理文件。 有没有人遇到过这样的问题? 这是我正在尝试的查询之一,在shell脚本中也有类似的工作,(如果有查询,请忽略查询中的语法错误) 问题答案: 您可以将其管道传输到psql 当右括号是SQL查询的一部分时,必

  • 问题内容: 可以这样插入一行: 这种方法会自动注释掉任何特殊字符。 如何一次插入多行? 我需要实现这一点: 我可以只使用js字符串运算符手动编译此类行,但是随后我需要以某种方式添加特殊字符转义符。 问题答案: 下面这篇文章:性能提升,从PG-承诺库,其建议的方法: 完全按照您的情况使用的示例: 它也将与一系列对象一起工作: 更新1 有关通过单个查询的高性能方法,请参见使用pg-promise进行多

  • 我有以下三张桌子 教室 注册学生 iduser_idclass_id 帖子 模型 Classroom.php 注册学生。php 邮递php 现在我需要获得某个班级的所有帖子,学生在该班级注册。 例如,一名学生注册了教室表中id号为1的班级。所以在registered_students表中会注意到,这个特定的用户是在这个特定的类下注册的。每个类在post表中可能有多个post。用户需要获得他类的所有

  • 我试图使用Django将PostgreSQL表提取到HTML中,当我在PostgreSQL的查询工具中执行空间查询时,我得到了完美的结果,但当我试图从Django执行相同的脚本时,我得到了所有的数据行。谢谢你提前帮忙。 姜戈剧本 HTML

  • 问题内容: 我用来从表中获取数据。现在,从称为的表中获取所有记录正在按预期方式工作。 现在,我希望对多个列执行查询,如下所示: 但这给LIKE带来了错误。我怎样才能做到这一点? 问题答案: 请像运营商一样使用 http://docs.sqlalchemy.org/en/rel_0_9/core/sqlelement.html#sqlalchemy.sql.operators.ColumnOpera