重置数据库(清空所有内容),然后填充数据库。

169

有没有一个Rake命令可以清除数据库表中的数据?

我该如何创建一个db:seed脚本来预填充数据到我的表中?

7个回答

296

4
顺带一提:如果在生产环境中,您可能需要重新启动Rails服务器才能使更改生效/更新页面。 - etusm

172

您可以通过以下两种方式删除所有内容并重新创建数据库和种子:

  1. rake db:reset:从 schema.rb 中加载
  2. rake db:drop db:create db:migrate db:seed:从迁移中加载

请确保您没有与数据库建立连接(如 Rails 服务器、SQL 客户端等),否则数据库将无法删除。

schema.rb 是由以下命令生成的当前数据库状态的快照:

rake db:schema:dump

感谢您提醒大家关闭任何服务器,以确保数据库被正确删除。 - aardvarkk

12
自 Rails 5 起,命令行工具 rake 已被别名为 rails,所以现在可以使用 rails db:reset 命令代替 rake db:reset,效果相同。

8
如果您不想删除和重新创建整个系统以重新加载数据,您可以在seed.db文件中使用MyModel.destroy_all(或delete_all)清空表格,然后再使用db:seed操作来重做。这只会影响您已经加载了数据的表格,而不会影响其余的表格。在https://dev59.com/tWUp5IYBdhLWcg3w6qyq#14957893上有一个“肮脏的技巧”,类似于迁移上下文中添加“去种子”操作...

重新从头开始创造一切对我来说太耗费时间了,这很聪明。 - m02ph3u5

7
在Rails 6中,您现在可以执行像rake db:seed:replant这样的操作。该命令会清空当前环境下的每个数据库表并加载预设数据。详见链接:https://blog.saeloun.com/2019/09/30/rails-6-adds-db-seed-replant-task-and-db-truncate_all.html
$ rails db:seed:replant --trace
** Invoke db:seed:replant (first_time)
** Invoke db:load_config (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:load_config
** Invoke db:truncate_all (first_time)
** Invoke db:load_config
** Invoke db:check_protected_environments (first_time)
** Invoke db:load_config
** Execute db:check_protected_environments
** Execute db:truncate_all
** Invoke db:seed (first_time)
** Invoke db:load_config
** Execute db:seed
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke db:load_config
** Execute db:abort_if_pending_migrations
** Execute db:seed:replant

非常好的解决方案 - 比起必须删除整个数据库来说,更加简单和不会产生太多干扰! - Sami Birnbaum
我很高兴这能够帮到你。我认为这是2020年应该采取的方式,但需要注意的是,这个问题最初是在2010年提出的。 - MZaragoza
1
鉴于这是Rails 6的一个功能,似乎Rails开发人员也同意您的观点。 - Sami Birnbaum

0

当您想要删除本地数据库并从 db/seeds.rb 中加载数据重新开始时,可以使用 rake db:reset。这是一个有用的命令,当您仍在确定模式并经常需要向现有模型添加字段时。

一旦使用重置命令,它将执行以下操作: 删除数据库:rake db:drop 加载模式:rake db:schema:load 种子数据:rake db:seed

但是,如果您想完全删除数据库,则可以使用 rake db:drop。删除数据库还将删除任何模式冲突或错误数据。如果您想保留您拥有的数据,请确保在运行此命令之前备份数据。

这是关于最重要的 rake 数据库命令 的详细文章。


0
请按照以下命令操作:
  1. rails db:migrate:reset

  2. 再次运行rails db:seed


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接