有没有一个Rake命令可以清除数据库表中的数据?
我该如何创建一个db:seed脚本来预填充数据到我的表中?
有没有一个Rake命令可以清除数据库表中的数据?
我该如何创建一个db:seed脚本来预填充数据到我的表中?
我使用rake db:reset
命令,它会删除并重新创建数据库,并包含您的seeds.rb文件。
http://guides.rubyonrails.org/migrations.html#resetting-the-database
您可以通过以下两种方式删除所有内容并重新创建数据库和种子:
rake db:reset
:从 schema.rb 中加载rake db:drop db:create db:migrate db:seed
:从迁移中加载请确保您没有与数据库建立连接(如 Rails 服务器、SQL 客户端等),否则数据库将无法删除。
schema.rb 是由以下命令生成的当前数据库状态的快照:
rake db:schema:dump
rake
已被别名为 rails
,所以现在可以使用 rails db:reset
命令代替 rake db:reset
,效果相同。MyModel.destroy_all
(或delete_all
)清空表格,然后再使用db:seed
操作来重做。这只会影响您已经加载了数据的表格,而不会影响其余的表格。在https://dev59.com/tWUp5IYBdhLWcg3w6qyq#14957893上有一个“肮脏的技巧”,类似于迁移上下文中添加“去种子”操作...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
当您想要删除本地数据库并从 db/seeds.rb
中加载数据重新开始时,可以使用 rake db:reset
。这是一个有用的命令,当您仍在确定模式并经常需要向现有模型添加字段时。
一旦使用重置命令,它将执行以下操作:
删除数据库:rake db:drop
加载模式:rake db:schema:load
种子数据:rake db:seed
但是,如果您想完全删除数据库,则可以使用 rake db:drop
。删除数据库还将删除任何模式冲突或错误数据。如果您想保留您拥有的数据,请确保在运行此命令之前备份数据。
这是关于最重要的 rake 数据库命令 的详细文章。
rails db:migrate:reset
再次运行rails db:seed