4

ここにあるRubyのmysql2gemを使用しています: https ://github.com/brianmario/mysql2

私は次のコードを持っています:

client = Mysql2::Client.new(
  :host => dbhost, 
  :port => dbport, :database => dbname,
  :username => dbuser, 
  :password => dbpass)
sql = "SELECT column1, column2, column3 FROM table WHERE id=#{id}"
res = client.query(sql, :as => :array)
p res # prints #<Mysql2::Result:0x007fa8e514b7d0>

上記の.query呼び出しでハッシュの配列を返すことは可能ですか?配列内の各ハッシュはresの形式になりますcolumn => value。これは手動で行うことができますが、ドキュメントから、上記の形式で結果をメモリに直接ロードできるという印象が残りました。とにかく結果をjsonでエンコードする必要があるため、これが必要です。したがって、行を1つずつフェッチする利点はありません。また、データの量は常に非常に少ないです。

4

3 に答える 3

8

変化する

res = client.query(sql, :as => :array)

に:

res = client.query(sql, :as => :hash)

@Tadmanが言うように、:as => :hashがデフォルトなので、実際には何も指定する必要はありません。

于 2012-10-22T15:08:55.030 に答える
3

結果はいつでもJSONとして直接取得できます。

res = client.query(sql, :as => :json)

私の知る限り、デフォルトの形式はハッシュの配列です。シンボルキーが必要な場合は、それらを要求する必要があります。これの多くは、gem自体に文書化されています。

また、文字列置換を使用してクエリに内容を挿入する場合は、非常に注意する必要があります。可能な限り、プレースホルダーを使用してください。これらはmysql2ドライバーによって直接サポートされていないため、ActiveRecordやSequelなどのアダプターレイヤーを使用する必要があります。

于 2012-10-22T14:49:41.483 に答える
3

mysql2のソースコードはMySql2::Resultを単純include Enumerableに実装しているため、データにアクセスするための明白な方法は、Enumerableここのdocに実装されているメソッドを使用することです。

たとえば、#each、#each_with_index、#collect、#to_aはすべて、Resultの要素にアクセスするための便利な方法です。

puts res.collect{ |row| "Then the next result was #{row}" }.join("\t")
于 2014-05-28T15:06:09.373 に答える