如何通过在Ruby Rails平台中运行sql脚本来种子mysql数据库?

我基本上是Ruby程序员和Ruby Rails的初学者。 在java中,要运行种子数据库ant任务,ant任务执行SQL脚本。 SQL脚本基本上是一组insert语句。

我希望在Ruby Rails平台上运行sql脚本必须有一些相当于ant的任务?

编辑回应尼基塔的回答:

虽然可以使用迁移作为播种数据的方式之一。 但我不想重写编写与sql脚本相对应的迁移类。 所以我需要一些解决方案,我必须只执行sql脚本文件。 我想通过sql代码只通过数据库进行管理。

我个人不喜欢使用迁移来播种大量的“静态”数据。 您可以通过以下方式轻松地从db/seeds.rb执行sql语句:

 # Empty the soon-to-be-seeded table MyModel.delete_all # Get the current DB connection connection = ActiveRecord::Base.connection(); # Execute a sql statement connection.execute("Insert INTO my_models (id, name) VALUES (1, 'Example 1'), (2, 'Example 2'), (3, 'Example 3');") 

基本上,一旦你有了当前的连接,你就可以调用一个使用connection.execute("SQL CODE HERE")的SQL语句connection.execute("SQL CODE HERE")

如果从控制台生成rails应用程序,则应该有db/seeds.rb文件。 它使用默认值填充数据库表。

然后,您可以执行rake db:seed

自动生成的seeds.rb包含这个例子,它应该清除任何疑问

 # This file should contain all the record creation needed to seed the database with its default values. # The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). # # Examples: # # cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }]) # Major.create(:name => 'Daley', :city => cities.first) 

请注意,您不要在其中放置任何sql语句(通常不会)。 虽然您仍然可以从种子文件或迁移中执行sql,但首选使用ruby代码和模型。

在评论上
也许我们对“种子”意味着什么有不同的理解。
无论如何, 迁移应该在这里有所帮助。
在我的post中覆盖它的主题太大了,所以请阅读指南。 虽然它侧重于创建/删除表,但您也可以在迁移中操作数据。

对于初始,静态daata使用建议的种子文件。

出于其他目的,您可以将整个insert语句包装在活动记录语句中,例如find_by_sql(“insert into mytable(col1,col2)values(1,2)”)。 使用“发现者”并不是很好的阅读,但它会做到这一点。
您也可以使用ActiveRecord::Base.connection.execute(sql)并将您的sql放在那里。 无论你有什么,如插入等都将被执行。 通常你需要一个; 如果你有多个陈述,最后。