Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Ruby+Sequel-将数组序列化为文本数组的查询_Sql_Ruby_Arrays_Postgresql_String Interpolation - Fatal编程技术网

Sql Ruby+Sequel-将数组序列化为文本数组的查询

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},"

我在ruby应用程序中有一个过滤器数组,可以对Postgres连接进行原始SQL查询。我想知道如何将这个数组序列化为可查询的

i、 e.:从{strings_array}中字符串所在的数据中选择*

我找不到这方面的任何资源。序列化此查询的正确方法是什么

编辑:我最终发现:

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为了更好地理解,我会更新我的答案