4

我正在使用在这里找到的 Ruby 的 mysql2 gem: 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调用是否有可能返回哈希数组,数组中的每个哈希都采用resformat column => value。我可以手动执行此操作,但从文档中我留下的印象是我可以将结果以上述格式直接加载到内存中。我需要这个,因为在那之后我无论如何都必须将结果编码为 json,所以我没有优势一一获取行。而且数据量总是很小。

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,因此访问数据的明显方法是使用Enumerabledoc here中实现的任何方法。

例如,#each、#each_with_index、#collect 和 #to_a 都是访问Result's 元素的有用方法。

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