我想在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?它将我的数据转储到表格中。
任何疑问..回复
感谢名单
答案 0 :(得分:32)
在 db / seeds.rb 中尝试使用 rake db:seed
执行原始SQLconnection = 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)