如何从gem-mysql2获取查询结果?为何执行SELECT查询无结果?
关于mysql2 gem的两个问题解答
嘿,我来帮你搞定这两个mysql2使用中的问题!
问题1:如何从gem-mysql2获取查询结果?
mysql2执行query方法后返回的是Mysql2::Result对象,这个对象本身是可枚举的集合,你需要通过遍历或者转换的方式才能拿到具体的查询行数据:
- 直接遍历获取每一行:
r.each { |row| puts row['CLIENT_ID'] } - 转换为数组,方便后续操作:
results_array = r.to_a ap results_array # 这样就能看到所有结果的数组了 - 如果只需要第一行数据,直接用
first方法:first_row = r.first ap first_row['CLIENT_ID']
问题2:执行给定Ruby代码进行SELECT查询时,为何无法得到查询结果?
你代码里的问题很明确:你用ap r打印的是Mysql2::Result这个对象本身,而不是它包含的查询结果数据!
从你给出的输出就能看到,打印的是对象的内存地址和内部配置参数,不是实际的查询行。另外那个Fixnum is deprecated的警告只是因为你用的awesome_print版本太老,和Ruby新版本不兼容,不是导致看不到结果的原因。
解决办法:
你需要把结果对象转换成可查看的数据格式,或者遍历它:
- 遍历结果打印每一行:
#!/usr/bin/ruby require 'mysql2' require 'awesome_print' client = Mysql2::Client.new(:host => "example.com", :username => "x", :password => "x", :database => "hd") r = client.query("select CLIENT_ID from CLIENT where EMAIL='x@x.com'") # 遍历打印每一行 r.each do |row| ap row end - 或者直接转成数组再打印:
ap r.to_a
如果这样操作后还是没有数据,那就要检查你的SQL语句本身了——可以手动在数据库客户端执行这条select CLIENT_ID from CLIENT where EMAIL='x@x.com',看看是否真的有匹配的记录,可能是邮箱地址写错或者数据库里没有对应的数据哦。
内容的提问来源于stack exchange,提问作者Louise
相关产品推荐
相关产品推荐

