使用Ruby/MySQL构建有效的MySQL查询

使用Ruby/MySQL构建有效的MySQL查询,mysql,ruby,Mysql,Ruby,如果使用Ruby/MSQL库,我返回了一个Mysql::Result类型的对象,我将如何构造一个字符串来遍历该对象并构造一个有效的Mysql查询?我不知道如何从下面的输出中删除最后一个逗号,以及如何将此输出传递回query()方法 在这种情况下,我会使用join,因此不要循环,每次都添加逗号,而是执行以下操作: ["One", "Two", "Three"].join(',') 当然,首先需要将散列转换为包含感兴趣元素的数组!试试这个: (res.each_hash{|row| "(#{row

如果使用Ruby/MSQL库,我返回了一个Mysql::Result类型的对象,我将如何构造一个字符串来遍历该对象并构造一个有效的Mysql查询?我不知道如何从下面的输出中删除最后一个逗号,以及如何将此输出传递回query()方法


在这种情况下,我会使用join,因此不要循环,每次都添加逗号,而是执行以下操作:

["One", "Two", "Three"].join(',')
当然,首先需要将散列转换为包含感兴趣元素的数组!试试这个:

(res.each_hash{|row| "(#{row["name"]}, #{row["category"]})"}).join(",")
值=[]
res.每行do | r|

值执行此操作的一种方法是:

    require 'mysql'    
    dbh = Mysql.real_connect("host", "user", "pass", "db")    
    res = dbh.query("SELECT name, category FROM animals")   
    stmt = "INSERT INTO animals (name, category) VALUES ("    
    res.each_hash do |row|
        stmt << "(#{row["name"]}, #{row["category"]})"  
    end    
    stmt << ")"

一般来说,如果您不想使用任何Ruby magic(如.join()),您可以通过索引循环数组/散列,并且仅在逗号不是最后一个元素时添加逗号:

  if(index < array.length) string << ",\n"

if(index
values = []
res.each_hash do
  |row| values << "('#{row.map{|d,x| dbh.quote(x) }.join("', '")}')" 
  end
puts values.join(",")

query="INSERT INTO animals (name, category) VALUES #{values.join(", ")}"
dbh.query(query)
值=[]
res.each_hash do

|行|值联接是ruby magic吗?真正地s=“”;def s.foo;把“福”;结束;s、 福是魔法。实例_eval{define_method…}}很神奇。康斯特的失踪是一种魔力。join将事物与另一事物结合在一起,当你想到这一点时,会觉得不那么令人印象深刻。我同意这是在边缘的“红宝石魔术”,但红宝石魔术没有少(IMHO)。如何加入任何少的'魔术'的长度或非常感谢!但是如何添加单引号呢?query=“INSERT-INTO-animals(name,category)value(#{VALUES.join(“,”)”给出INSERT-INTO-animals(name,category)value((蛇,爬行动物),(青蛙,两栖动物),(金枪鱼,鱼),(浣熊,哺乳动物))使用普通字符串插值
     dbh.query(stmt)
  if(index < array.length) string << ",\n"
values = []
res.each_hash do
  |row| values << "('#{row.map{|d,x| dbh.quote(x) }.join("', '")}')" 
  end
puts values.join(",")

query="INSERT INTO animals (name, category) VALUES #{values.join(", ")}"
dbh.query(query)