使用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和邮政编码整数,暂时不重要。)
答案 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;"
但你最好使用消毒剂而不是简单的单引号。