将SQL文件导入Rails 4 ActiveRecord db?

我在这里看了几个其他的问题,它们模糊地相似,但不完全是我正在寻找的。

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

我已经四处寻找,但找不到一个聪明的方法来做到这一点,所以我现在请求Rails专业人员寻求帮助。

如果我理解你的问题,你需要从.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文件转换为Rails数据库模式文件,而无需手动执行此操作。

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

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

一旦将.sql文件中定义的模式实际加载到数据库中,您将需要按照此问题中列出的步骤操作:

首先运行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 

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

.import FILE TABLE Import data from FILE into TABLE

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

像冠军一样工作。

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

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

请注意避免对SQL文件发表任何评论,以便解析更容易。