ruby-on-rails - 如何使用 exec_params where params in ('','','')
问题描述
我用
sql = "Select * from table where type in ($1)
pg_con = PG::Connection.open(myserver)
pg_con.exec_params(sql, [get_type_action])
get_type_action 返回格式为“'test1'、'test2'、'test3'”等的所有类型......类型 0-90 的计数。所有代码返回 0 行。我开始寻找问题。我输入了一个没有''而不是函数的值“test1”并得到了所需的结果。但尝试输入多个值“test1,test2”,我得到 0 行。我究竟做错了什么?
更新 1 我不能为此使用活动记录。但我找到了例子
a = ['alpha', 'bravo', 'ccharlie']
b = $conn.exec_params( %Q{ SELECT id FROM tablename WHERE fieldname IN ( $1 ) }, [ PG::TextEncoder::Array.new.encode(a) ] )
我尝试了一下,但还没有工作。可以尝试做类似的事情,以一个例子为基础吗?还是他错了?
解决方案
PG 不会为你构建 SQL。列表的每个元素都in
必须是其自己的参数。
sql = "select * from table where type in ($1, $2, $3)"
pg_con = PG::Connection.open(myserver)
p pg_con.exec_params(sql, ["a", "b", "c"]).values
但是由于您使用的是 Ruby on Rails,因此无需编写简单的 SQL。使用ActiveRecord。假设表名是事物。调用ActivceRecord Thing
,然后where
使用数组作为值调用。
class Thing < ActiveRecord
end
things = Thing.where(type: ["a", "b", "c"]
推荐阅读
- c++ - ASIO 正确处理多线程 + strand + socket + timer
- composer-php - 神器作曲家packages.json 404
- linux - 通过 ssh 连接到外部服务器
- python - 如何在 python 3.7 中安装pyramid-arima
- java - 如何从 Xamarin 打开从 Android Studio 创建的活动?
- python - python将位置从一个def导入另一个def以从天气API打印位置
- node.js - Express:用子资源定义 REST API?
- docker - Docker:如何将带有数据的容器从一台主机传输到另一台主机
- fortran - 在 Fortran90 内在函数上使用常规指令
- node.js - 将请求结果的第一部分通过管道传输到另一台主机