遗留数据处理

发布测试版本,需要导入遗留的数据,刚开始,直接新建两个connection,一个是旧的数据库sqlserver,一个是新的数据库mysql,但是在保存mysql数据的时候:报无法找到sqlserver的表,原来数据在获取的时候才去取sqlserver的数据,并没有完全取出来。于是乎想到前两天网上看到的Magic Multi Connection:http://magicmodels.rubyforge.org/magic_multi_connections/

安装试用一下:
[code]gem install magic_multi_connections[/code]


代码只是做了稍微的改动,就可以用了。
[code]
require 'rubygems'
require_gem 'activerecord'
require_gem 'magic_multi_connections'

ActiveRecord::Base.establish_connection(:adapter=>'sqlserver',:host=>'localhost',:database=>'hbpcvs',:username=>'sa')

class Member < ActiveRecord::Base
self.table_name = "t_rm_vip_info"
self.primary_key = "card_flowno"
end

class MemberScore < ActiveRecord::Base
self.table_name="t_memtotalscore"
self.primary_key="membercode"
end

scores = {}
MemberScore.find(:all).each{|ms| scores[ms.membercode]=ms.remainderscore}

print "Fetch member's amount:",members.size,"\n"

class UserInfo < ActiveRecord::Base establish_connection(:adapter=>'mysql',:host=>'localhost',:database=>'romh',:username=>'root')
end

Member.find(:all).each do |m|
u = UserInfo.new
m.attribute_names.each{|ar| u.send("#{ar}=",m.send("#{ar}"))if u.attribute_present?(ar)}
u.card_no = m.id
#其他的属性
#...
#额外另一张表用户的积分
u.socres=scores[m.id].nil? ? 0:scores[m.id]
u.save!
end
[/code]

:)成功。


但是唯一可惜的是效率的问题,一万多条数据跑了好几分钟:(有空再考虑优化,现在得继续忙着干活去.

你可能感兴趣的:(遗留数据处理)