【问题标题】:Use more than one database in Sequel application在 Sequel 应用程序中使用多个数据库
【发布时间】:2019-02-21 13:59:35
【问题描述】:

我正在使用 sequel 从不同的数据库中查询信息。使用以下代码

Sequel.connect(mmt018_db_connection_settings) do |db|
  class ResultPlacementAssign < Sequel::Model(db[:result_placement_assign]); end
  # do something with 'ResultPlacementAssign'
end

Sequel.connect(mmt024_db_connection_settings) do |db|
  class PlatineMass < Sequel::Model(db[:platine_mass]); end
  # do something with 'PlatineMass'
end

效果很好。但是,如果我尝试将模型定义放在单独的文件中以便在需要时需要它们,那么似乎只有第一个数据库连接有效。 所以把上面的代码改成

Sequel.connect(mmt018_db_connection_settings) do |db|
  require File.join(__dir__, 'models', 'm_mt_018', 'ResultPlacementAssign.rb')
  # do something with 'ResultPlacementAssign'
end

Sequel.connect(mmt024_db_connection_settings) do |db|
  require File.join(__dir__, 'models', 'm_mt_024', 'PlatineMass.rb')
  # do something with 'PlatineMass'
end

使用模型定义

class ResultPlacementAssign < Sequel::Model(:result_placement_assign)
end

class PlatineMass < Sequel::Model(:platine_mass)
end

不起作用。
它告诉我platine_mass 在数据库中不存在,因为它仍在使用第一个连接。 我是否遗漏了什么,或者如果模型定义在单独的文件中定义,是否真的无法告诉模型定义使用哪个数据库连接。

【问题讨论】:

    标签: ruby sequel


    【解决方案1】:

    您可以通过将数据库或数据集参数传递给Sequel::Model() 来告诉 Sequel 将哪个数据库用于给定模型。一般来说,您应该将数据库对象分配给常量:

    DB1 = Sequel.connect(mmt018_db_connection_settings)
    DB2 = Sequel.connect(mmt024_db_connection_settings)
    class ResultPlacementAssign < Sequel::Model(DB1[:result_placement_assign]); end
    class PlatineMass < Sequel::Model(DB2[:platine_mass]); end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-16
      • 2010-11-07
      相关资源
      最近更新 更多