从Ruby Hash构造SQL语句

时间:2013-09-25 09:28:22

标签: mysql sql ruby

使用MySQL和Ruby 1.9。我有以下哈希:

h = {:country=>"Thailand", :postal_code=>"10110"}

我想运行这个SQL语句:

con.query "UPDATE table SET country = 'Thailand', postal_code = '10110' WHERE id = 1;"

我尝试了几种方法,但似乎无法构建所需的语句。我该怎么做?

(请忽略ID和邮政编码整数,暂时不重要。)

2 个答案:

答案 0 :(得分:3)

我建议您查看使用Sequel ORM。使用单一代码库,可以很容易地使用MySQL,PostgreSQL,Oracle,SQLite,MSSQL等数据库。

如果您想使用SQLite进行开发,使用MySQL或PostgreSQL进行测试并使用Oracle在生产环境中运行,您可以在不更改任何代码的情况下进行测试,只有在您建立连接时,单个字符串中的DSN才会发生变化。

它编写非常干净的SQL,允许您根据需要轻松使用自定义查询。我们将它用于我们所有的Ruby数据库连接并喜欢它。

您可以使用与您完全相同的哈希来立即生成查询。这来自文档:

  

过滤记录

     

过滤记录的一种简单方法是提供值的哈希值,以匹配其中:

my_posts = posts.where(:category => 'ruby', :author => 'david')
# WHERE category = 'ruby' AND author = 'david'

有关更多示例,请参阅the README

答案 1 :(得分:2)

你的意思是这样的吗?

h = {:country => "Thailand", :postal_code => "10110"}
"UPDATE table SET #{h.map { |k, v| "#{k} = '#{v}'" }.join(', ')} WHERE id = 1;"
# "UPDATE table SET country = 'Thailand', postal_code = '10110' WHERE id = 1;"

但你最好使用消毒剂而不是简单的单引号。