Sql Ruby+Sequel-将数组序列化为文本数组的查询
我在ruby应用程序中有一个过滤器数组,可以对Postgres连接进行原始SQL查询。我想知道如何将这个数组序列化为可查询的 i、 e.:从{strings_array}中字符串所在的数据中选择* 我找不到这方面的任何资源。序列化此查询的正确方法是什么 编辑:我最终发现:Sql Ruby+Sequel-将数组序列化为文本数组的查询,sql,ruby,arrays,postgresql,string-interpolation,Sql,Ruby,Arrays,Postgresql,String Interpolation,我在ruby应用程序中有一个过滤器数组,可以对Postgres连接进行原始SQL查询。我想知道如何将这个数组序列化为可查询的 i、 e.:从{strings_array}中字符串所在的数据中选择* 我找不到这方面的任何资源。序列化此查询的正确方法是什么 编辑:我最终发现: query = '' arr.each_with_index { |e, i| if i == arr.length - 1 query += "#{e}" else query += "#{e},"
query = ''
arr.each_with_index { |e, i|
if i == arr.length - 1
query += "#{e}"
else
query += "#{e},"
end
}
然后
和列@>“{query}”
但是必须有一种不太详细的方法,不?如果您使用这样的连接方法,那么这种方法可以不太详细:
# I presume arr contains an array that you want serialize
strings_array = "'#{arr.join("','")}'"
query = "SELECT * FROM data WHERE strings IN #{strings_array}"
你说你用Sequel。Sequel可以自动执行此类查询:
DB[:data].where(strings: ["my", "array", "of", "strings"])
# => #<Sequel::Postgres::Dataset: "SELECT * FROM \"data\" WHERE (\"strings\" IN ('my', 'array', 'of', 'strings'))">
手工构造SQL查询是有风险的,尤其是当您处理来自用户的数据时。一旦您了解了ORM Activerecord,在这种情况下,您就不会像您那样手动或半自动构造SQL。以本例为例,它创建了一个到数据库Oracle的连接,将表映射到一个Ruby类,并为该类提供了各种操作方法。 在本例中,我使用了两个where's,一个使用散列作为过滤器,另一个使用少量SQL。结果将是一个SQL,一旦您使用它做了一些事情,它就会自动生成并执行。在本例中,使用每个SQL
require 'active_record'
ActiveRecord::Base.establish_connection(
:adapter => 'oracle_enhanced',
:database => "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (COMMUNITY = ORATCP.world)(PROTOCOL = TCP)(Host = server.domain)(Port = 9999)))(CONNECT_DATA = (SID = SID_ID)))",
:username => 'user',
:password => 'password'
)
class Member < ActiveRecord::Base
self.table_name = 'my_table'
end
Member.where(country: 'Belgium').where("'gender = 'M'").each do |member|
p member
end
是否要序列化数据数组或对该数据的查询?@Jesper-我要查询变量数据数组。例如,我有一个字符串数组,比如names=['Jason','Bob','Chris'],我想将名称嵌入到查询字符串中,这样我就可以匹配一个列first_names,其中names数组中的值位于该行中。这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。@splrs为了更好地理解,我会更新我的答案