【问题标题】:Import SQL file to Rails 4 ActiveRecord db?将 SQL 文件导入 Rails 4 ActiveRecord 数据库?
【发布时间】:2014-07-18 18:33:57
【问题描述】:

我在这里查看了其他几个问题,它们大致相似,但不完全是我想要的。

我要做的是导入/“转换”一个 *.sql 文件,其中包含 8 个表,每个表包含大约 24 列。这个文件实际上是一个相当扁平的文件,好像以前唯一有效的查询必须与表之间的共享 :id 相关联(因此, SELECT * FROM table1, table2 WHERE id = '1' 将提取所有结果,其中 当时很好)。

我四处搜索,但找不到一个聪明的方法来做到这一点,所以我现在向 Rails 专家寻求帮助。

【问题讨论】:

  • 这是必须通过 Rails 完成的事情吗?或者你可以通过控制台来做吗?你使用什么样的数据库?

标签: sql ruby-on-rails activerecord


【解决方案1】:

我假设您想要的基本上是将您的 SQL 文件转换为 Rails 数据库架构文件,而无需自己手动完成。

执行此操作的一种快速方法是手动执行 SQL 文件,可能是通过登录到您的数据库并以这种方式加载文件,或者执行类似于 in this question 所做的操作:

ActiveRecord::Base.connection.execute(IO.read("path/to/file"))

一旦您将 .sql 文件中定义的架构实际加载到数据库中,您将需要按照in this question 概述的步骤进行操作:

首先运行rake db:schema:dump,它将根据数据库的当前状态生成一个db/schema.rb数据库文件。

从这里,您可以创建一个引用 schema.rb 文件的 db/migrate/001_original_schema.rb 迁移,如下所示:

class OriginalDatabaseMigration < ActiveRecord::Migration
  def self.up
    # contents of schema.rb here
  end

  def self.down
    # drop all the tables
  end
end

【讨论】:

    【解决方案2】:

    如果我正确理解您的问题,您需要从 .sql 文件填充您的数据库。我是这样做的:

    connection = ActiveRecord::Base.connection
    
    ql = File.read('db/some_sql_file.sql')
    	statements = sql.split(/;$/)
    	statements.pop
    	ActiveRecord::Base.transaction do
    		statements.each do |statement|
    			connection.execute(statement)
    		end
      end

    将你的 sql 文件放到 db 文件夹中。

    【讨论】:

      【解决方案3】:

      我能够做到这一点的一种方法 - 使用rails dbconsole

      .import FILE TABLE Import data from FILE into TABLE

      基本上是.import ./path/to/file TABLE_NAME

      像冠军一样工作。

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题,我刚刚创建了一个脚本并解析了 所有 SQL 语句在每行的开头添加 'execute("' 并在末尾添加 '")'。

        然后我像往常一样创建了一个新的迁移,并将所有输出粘贴到迁移脚本上。这对我行得通。

        请注意避免在 SQL 文件中使用任何 cmets,以便解析更容易。

        【讨论】:

          猜你喜欢
          • 2012-01-10
          • 1970-01-01
          • 2012-11-16
          • 2011-07-18
          • 1970-01-01
          • 2016-05-14
          • 1970-01-01
          • 1970-01-01
          • 2012-06-03
          相关资源
          最近更新 更多