166

是否有 rake 命令可以清除数据库表中的数据?

如何创建 db:seed 脚本以将数据预填充到我的表中?

4

7 回答 7

292

我使用rake db:resetwhich drop 然后重新创建数据库并包含您的 seed.rb 文件。 http://guides.rubyonrails.org/migrations.html#resetting-the-database

于 2010-10-23T13:45:01.180 回答
168

您可以删除所有内容并使用两者重新创建数据库+种子:

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

确保您没有与数据库(rails 服务器、sql 客户端..)的连接,否则数据库不会丢失。

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

rake db:schema:dump
于 2013-05-14T13:48:39.310 回答
9

从 Rails 5 开始,rake命令行工具现在已经被别名rails

rails db:reset代替rake db:reset

也能正常工作

于 2017-12-07T20:02:35.753 回答
8

如果您不想删除并重新创建整个 shebang 只是为了重新加载数据,您可以在 seed.db 文件中使用MyModel.destroy_all(或)在语句加载数据delete_all之前清理表。然后,您可以一遍又一遍地MyModel.create!(...)重做该操作。db:seed(显然,这只影响您已将数据加载到其中的表,而不影响其余表。)

在https://stackoverflow.com/a/14957893/4553442有一个“肮脏的黑客”来添加类似于上下迁移的“去种子”操作......

于 2016-03-05T00:20:16.760 回答
3

在 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
于 2020-09-09T19:10:14.827 回答
0

当您rake db:reset想删除本地数据库并从db/seeds.rb. 当您仍在弄清楚您的架构并且经常需要向现有模型添加字段时,这是一个有用的命令。

使用重置命令后,它将执行以下操作:删除数据库:rake db:drop 加载架构:rake db:schema:load 播种数据:rake db:seed

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

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

于 2018-03-29T14:13:50.463 回答
0

请遵循以下命令:

  1. rails db:migrate:reset

  2. rails db:seed再次

于 2022-01-28T10:06:42.033 回答