1

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 と郵便番号の整数は無視してください。今のところ問題ありません。)

4

2 に答える 2

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'

その他の例については、READMEを参照してください。

于 2013-09-25T10:43:49.640 に答える
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;"

ただし、単純な一重引用符の代わりにサニタイザーを使用することをお勧めします。

于 2013-09-25T09:35:34.657 に答える