17

我想在我的 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

如何通过在 Ruby Rails 平台上运行 sql 脚本来播种 mysql 数据库?它将我的数据转储到表中。

任何疑问..请回复

谢谢

4

4 回答 4

32

db/seeds.rb中尝试使用rake db:seed执行原始 SQL

connection = ActiveRecord::Base.connection()
connection.execute("*_YOUR_SQL_HERE_*")
于 2011-06-03T11:05:06.113 回答
7

对于多个 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
于 2015-04-13T07:59:41.630 回答
3

可以从文件加载的 Fredrik Boströ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')
于 2017-06-09T03:12:26.140 回答
0

这个答案超级晚了,但希望它可以帮助我这个职位的人。您可以使用 .execute_batch 直接连接到您正在使用的数据库版本的数据库,而不是遍历每个 sql 语句。下面是一个使用 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)
于 2020-07-23T22:48:55.313 回答