在rails3中的seed.rb中执行sql脚本

时间:2011-06-03 06:38:20

标签: ruby-on-rails seed

我想在seed.rb

中执行这个sql脚本
LOAD DATA LOCAL INFILE '/home/list-38.csv'
INTO TABLE list
FIELDS TERMINATED BY ':'
LINES TERMINATED BY '\n'
(email,name,password);

我检查了这个链接,但无法找出解决方案。所以,一旦我们运行rake db:seed

How to seed mysql database by running sql scripts in Ruby Rails platform?它将我的数据转储到表格中。

任何疑问..回复

感谢名单

4 个答案:

答案 0 :(得分:32)

db / seeds.rb 中尝试使用 rake db:seed

执行原始SQL
connection = ActiveRecord::Base.connection()
connection.execute("*_YOUR_SQL_HERE_*")

答案 1 :(得分:5)

对于多个sql语句,我最终分别迭代每个语句:

# db/seeds.rb

connection = ActiveRecord::Base.connection()

sql = <<-EOL
  INSERT INTO users values ('Admin');
  INSERT INTO categories values ('Supervisors');
EOL

sql.split(';').each do |s|
  connection.execute(s.strip) unless s.strip.empty?
end

答案 2 :(得分:2)

FredrikBoström的回答可以从文件中加载:

# db/seeds.rb

def execute_sql_file(path, connection = ActiveRecord::Base.connection)
  require 'active_support/core_ext/object/blank.rb'
  IO.read(path).split(';').reject(&:blank?).each do |statement|
    connection.execute(statement)
  end
end

execute_sql_file('my.sql')

答案 3 :(得分:0)

这个答案太迟了,但希望它能对我的位置有所帮助。无需遍历每个sql语句,您可以使用.execute_batch并通过使用所使用的数据库版本直接连接到数据库来使用。下面是使用SQLite3的示例。

#db/seeds.rb

DB = {:conn => SQLite3::Database.new("./db/development.sqlite")}

sql = <<-EOL
  INSERT INTO users values ('Admin');
  INSERT INTO categories values ('Supervisors');
EOL

DB[:conn].execute_batch(sql)