gpt4 book ai didi

arrays - Ruby PG Gem 使用 TextEncoder::Array 进行 SELECT WHERE fieldname IN exec_params

转载 作者:行者123 更新时间:2023-11-29 13:11:11 25 4
gpt4 key购买 nike

我需要从数组中搜索 id 字段。我正在使用 PG gem,所以我想我应该使用 TextEncoder::Array.new.encode(myarray) 来插入合格列表。 PostgreSQL结构如下:

SELECT id FROM tablename WHERE fieldname IN ('alpha', 'bravo', 'charlie')

所以我在 Ruby 中的起始数组是 ['alpha', 'charlie', 'bravo'],所以这是我当前的语法:

a = ['alpha', 'bravo', 'ccharlie']
b = $conn.exec_params( %Q{ SELECT id FROM tablename WHERE fieldname IN ( $1 ) }, [ PG::TextEncoder::Array.new.encode(a) ] )
puts b.inspect

exec_params 显然需要一个数组,即使它是单个数组元素。但是使用 PG::TextEncoder::Array.new.encode(a) 会产生以下结构:

"{alpha,bravo,charlie}"

...这是一个对象(.class)。我得到的不正确结果是没有找到任何记录,这是错误的。

如何将 Ruby 数组作为第一个 PG 参数放入其中?

更新:

我一直在使用:

...AND NOT (mytable.field = ANY ($6))

$6 是这样的:

PG::TextEncoder::Array.new(elements_type: PG::TextEncoder::String.new)

PG::TypeMapByColumn.new 实例中。那里的 Ruby 数组是有效的,包含一个值。在此示例中,它是数组中的单元素字符串,将在我的 SQL 语句中使用。一切都很好,但它不起作用。如果我真的看到了发送到 db 的 SQL 语句,那将会有所帮助。这里隐藏了太多。

最佳答案

我找到了答案:...AND NOT hashtag = ANY ($1)... 其中 $1 是正确的 Ruby array . PG gem 人员实际上并不支持它。

关于arrays - Ruby PG Gem 使用 TextEncoder::Array 进行 SELECT WHERE fieldname IN exec_params,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54496161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com