我正在使用Ruby on Rails,我必须创建一个从一个数据库到另一个数据库的导入程序。每个数据库中有超过100个表,我不想为每个表创建模型。是否有可能创建查询,指定表名?我不希望模型绑定到表。
例如:FirstDatabase.select('*').from('some_table').where(...)
没有set_table_name ...
只是动态模型
我还需要在不同的表中进行插入
答案 0 :(得分:4)
我根本不会使用模型来完成任务。相反,请根据需要使用基本连接的#select_all,#exec_insert,#exec_update和#exec_delete方法。
ActiveRecord::Base.connection.select_all("select * from #{table_name}")
返回行的哈希数组。
ActiveRecord::Base.connection.exec_insert("insert into #{table} (foo, bar) values(#{foo}, #{bar})
插入一行。对于您正在使用的数据库,这些值需要正确转义字符串,日期等。
ActiveRecord::Base.connection.quote("fo'o")
=> "'fo''o'" # When server is PostgreSQL
返回适合在SQL语句中使用的带引号的字符串表示。
now=Time.now
=> Fri Aug 23 02:24:40 -0700 2013
ActiveRecord::Base.connection.quote(now)
=> "'2013-08-23 09:24:40.365843'"
以UTC时区返回引用的日期/时间表示。
要处理多个数据库,您可以为每个数据库设置单个模型,然后从这些模型而不是ActiveRecord :: Base获取连接。
class TableInDbA << ActiveRecord::Base
establish_connection "database_a_#{Rails.env}"
end
class TableInDbB << ActiveRecord::Base
establish_connection "database_b_#{Rails.env}"
end
TableInDbA.connection.select_all("...