我需要创建一个 rake 任务,从 MySQL 数据库中获取表行,解析数据,然后插入到 Oracle 数据库中。数据库位于两个不同的主机上。
我目前的尝试:
namespace :import_from_mysql do
class MySQLConnection < ActiveRecord::Base
self.abstract_class = true
establish_connection({
:adapter => 'mysql',
:host => 'xxx.xxx.com',
:database => 'sample_database',
:username => 'username',
:password => 'password'
})
end
class MySQLTable < MySQLConnection
self.table_name = "users"
self.primary_key = "id"
self.inheritance_column = "something_unique_here"
end
desc "Parse data before inserting to oracle database"
task :insert_to_oracle => :environment do |t|
puts "Rake task has begun...\n\n"
puts "Parsing data from MYSQL...\n\n"
MySQLTable.establish_connection
puts "Rake task has completed!"
end
end
但是 MySQLTable.establish_connection 建立了到我的本地数据库的连接,即使我正在尝试连接到 mysql_adapter 也是如此。
当我尝试使用以下命令建立连接时,我能够连接到 MySQL 适配器,但我不知道在建立连接后如何访问我的表:
ActiveRecord::Base.establish_connection({:adapter => "mysql", :database => "sample_database", :host => "xxx.xxx.com", :username => "username", :password => "password" })
知道为什么它一直连接到 sqlite 吗?而在成功建立与mysql的连接后,如何在MySQLTable.establish_connection语句之后选择表行?
最佳答案
通过使用 ActiveRecord::Base 生成的连接,您可以对连接到的任何数据库执行 SQL 语句。像这样:
connection = ActiveRecord::Base.establish_connection(
:adapter => "mysql",
:host => "faraway",
:username => "myuser",
:password => "mypass",
:database => "somedatabase"
)
connection.execute('SELECT * FROM users')
一旦建立,连接也可以从 ActiveRecord::Base 类中引用。
ActiveRecord::Base.establish_connection(...)
ActiveRecord::Base.connection.execute(...)
关于mysql - 如何从 rake 任务建立连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31558459/