mysql - ruby/sql 语法未定义方法 `query' for nil :NilClass (NoMethodError)

标签 mysql sql ruby

我不断收到以下错误消息:

.rb:215:in block in collectData': undefined methodquery' for nil:NilClass (NoMethodError)

这是我的代码:

databases = {
  'aaa': Mysql2::Client.new(
      host:     '',
      username: '',
      password: '',
      database: ''
    ),
  'bbb': Mysql2::Client.new(
      host:     '',
      username: '',
      password: '',
      database: ''
    )
}

client1.query(" bla bla bla").each do |row|
  if row['mmm'] == 99
    # Look in next db
    next_db = databases[row['db']]
    row2 = next_db.query("SELECT...")

我从第一个 sql 查询 client1.query 中获取数据库的名称,例如 row['db'] = "aaa"“bbb”

对于测试,这样的东西也不起作用:

client1.query(" bla bla bla").each do |row|
  if row['mmm'] == 99
    # Look in next db
    next_db = databases['aaa']
    row2 = next_db.query("SELECT...")

像这样的东西是有效的:

client1 = Mysql2::Client.new(
    host:     '',
    username: '',
    password: '',
    database: ''
  )

client2 = Mysql2::Client.new(
    host:     '',
    username: '',
    password: '',
    database: ''
  )

client1.query(" bla bla bla").each do |row|
  if row['mmm'] == 99
    # Look in next db
    next_db = client2
    row2 = next_db.query("SELECT ")

我似乎无法理解为什么我的方法是“未定义”。

请帮忙,

谢谢!

最佳答案

因此,您拥有数据库的哈希值,并且您希望根据第一个数据库查询的结果查询下一个数据库...

基本上,您拥有的代码是正确的,只是您从不检查nil。在这种情况下,无论 row['db'] 返回什么,在 databases 哈希中都找不到匹配的数据库。我假设这是一个需要修复的异常。

所以...

# hash of databases
databases = {
   'aaa' => Mysql2::Client.new(host: '', username: '', password: '', database: ''),
   'bbb' => Mysql2::Client.new(host: '',username: '', password: '', database: '')
 }

# get the first database
client1 = databases['aaa'] 

# perform the query
client1.query("bla bla bla").each do |row|
  if row['mmm'] == 99
    # look in next db
    client2 = databases[row['db']]

    if (client2)
      row2 = client2.query("SELECT...")
    else
      raise "Database `#{row['db']}` is not defined."
    end
  end
end

关于mysql - ruby/sql 语法未定义方法 `query' for nil :NilClass (NoMethodError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38275867/

相关文章:

sql - 用于在 Azure 上运行脚本文件的 SSIS 包

mysql - 如何从更多表中获取总数?

java - 如何计算商会号码之间的相似度?

mysql计算结果是一样的

sql - 在 Go 模板中打印 sql.NullString 的值

ruby-on-rails - Ruby/Rails 中的检测 API 的用途是什么?

ruby - 如何在 Ubuntu 上修复 Nokogiri?

ruby - 使用 AND 作为逻辑门是否被认为是好的做法?

mysql - 左连接返回非所有行

mysql - 在两个mysql表中查找不同行的最快方法