0

invtypesRailsアプリケーションに関連付けられていないテーブルと、アプリケーションに関連付けられているテーブルが2つありitemsます。

テーブルinvtypesには、テーブルに移動する必要がある 20.000 のレコードがありitemsます。

私の最初の試みは、invtypes で ActiveRecord クエリを実行してすべてのエントリを取得し、各エントリを調べて、新しい追加属性をItemインスタンス化してから呼び出すことで新しいエントリを作成することでしたItem modelmodel.save

ただし、これは検証と、これを30分間実行するタスクを遅くする他のいくつかのこともRails Console行います。これは、これを数回行うため、それほど遅くすることはできません。

したがって、私の2番目のアイデアは、モデルのないプレーンな古いクエリでこれを試すことでしたが、これによりエラーが発生します。

  ←[1m←[35m (27.0ms)←[0m  INSERT INTO items (typeID, name, description, volume, price, created_at, updated_at) VALUES (0, '#System', '', 0.0, 0.0, '20
13-03-29 04:06:27 +0100', '2013-03-29 04:06:27 +0100');
ActiveRecord::StatementInvalid: Mysql2::Error: Incorrect datetime value: '2013-03-29 04:06:27 +0100' for column 'created_at' at row 1: INSERT INTO ite
ms (typeID, name, description, volume, price, created_at, updated_at) VALUES (0, '#System', '', 0.0, 0.0, '2013-03-29 04:06:27 +0100', '2013-03-29 04:
06:27 +0100');
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:2
33:in `query'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:2
33:in `block in execute'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:280:in
`block in log'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-3.2.1/lib/active_support/notifications/instrumenter.rb:20:in `instrume
nt'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:275:in
`log'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:2
33:in `execute'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/mysql2_adapter.rb:214:in `e
xecute'
        from (irb):21:in `block in irb_binding'
        from (irb):19:in `each'
        from (irb):19
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands/console.rb:47:in `start'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands/console.rb:8:in `start'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands.rb:41:in `<top (required)>'
        from script/rails:6:in `require'

Time.nowのせいで

result = ActiveRecord::Base.connection.select_all( "SELECT * FROM invtypes" )
time = Time.now
result.each do |row|
 sql = "INSERT INTO items (typeID, name, description, volume, price, created_at, updated_at) VALUES (#{row["typeID"]}, '#{row["typeName"]}', '#{row["description"]}', #{row["volume"]}, #{row["basePrice"]}, '#{time}', '#{time}');"
 ActiveRecord::Base.connection.execute(sql)
end

Ruby/Rails でこれを行うにはどうすればよいですか、または Java でアプリを作成する必要があります | このクエリを実行するには C ?

10 行のみを実行してからスローします。

        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:2
33:in `query'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:2
33:in `block in execute'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:280:in
`block in log'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-3.2.1/lib/active_support/notifications/instrumenter.rb:20:in `instrume
nt'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:275:in
`log'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:2
33:in `execute'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/mysql2_adapter.rb:214:in `e
xecute'
        from (irb):7:in `block in irb_binding'
        from (irb):4:in `each'
        from (irb):4
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands/console.rb:47:in `start'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands/console.rb:8:in `start'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands.rb:41:in `<top (required)>'
        from script/rails:6:in `require'
        from script/rails:6:in `<main>'
4

2 に答える 2

0

これを試すことができます:

time = Time.now.to_formatted_s(:db)
于 2013-03-29T11:53:22.487 に答える
0

ループ内の SQL クエリと挿入は低速です。で試してくださいINSERT..SELECT。このコマンドは、2 番目のステートメントで選択したすべての行を挿入します。どの DB を使用しているかはわかりませんが、たとえば MySQL を使用している場合は、ステートメントのドキュメントを参照してください。

于 2013-03-29T12:03:12.080 に答える