【问题标题】:Execute sql script inside seed.rb in rails3在 rails3 的 seed.rb 中执行 sql 脚本
【发布时间】:2011-09-07 14:30:03
【问题描述】:

我想在我的 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? 它将我的数据转储到表中。

任何疑问..请回复

感谢

【问题讨论】:

    标签: ruby-on-rails seed


    【解决方案1】:

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

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

    【讨论】:

    • 你好,保罗。如果我想为另一个表或更多表添加第二个 sql 查询怎么办?我应该添加一个新行吗? connection.execute("*_2nd_SQL_HERE_*") 并评论第一行?
    【解决方案2】:

    对于多个 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
    

    【讨论】:

    • 很好的答案!谢谢你。帮了我很多!
    【解决方案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')
    

    【讨论】:

      【解决方案4】:

      这个答案太晚了,但希望它对我这个职位的人有所帮助。您可以使用 .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)
      

      【讨论】:

        猜你喜欢
        • 2014-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-11
        • 1970-01-01
        • 1970-01-01
        • 2016-02-04
        • 2017-06-19
        相关资源
        最近更新 更多