是否有 rake 命令可以清除数据库表中的数据?
如何创建 db:seed 脚本以将数据预填充到我的表中?
我使用rake db:reset
which drop 然后重新创建数据库并包含您的 seed.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
从 Rails 5 开始,rake
命令行工具现在已经被别名rails
了
rails db:reset
代替rake db:reset
也能正常工作
如果您不想删除并重新创建整个 shebang 只是为了重新加载数据,您可以在 seed.db 文件中使用MyModel.destroy_all
(或)在语句加载数据delete_all
之前清理表。然后,您可以一遍又一遍地MyModel.create!(...)
重做该操作。db:seed
(显然,这只影响您已将数据加载到其中的表,而不影响其余表。)
在https://stackoverflow.com/a/14957893/4553442有一个“肮脏的黑客”来添加类似于上下迁移的“去种子”操作......
在 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
当您rake db:reset
想删除本地数据库并从db/seeds.rb
. 当您仍在弄清楚您的架构并且经常需要向现有模型添加字段时,这是一个有用的命令。
使用重置命令后,它将执行以下操作:删除数据库:rake db:drop
加载架构:rake db:schema:load
播种数据:rake db:seed
但是如果你想完全删除你的数据库,你可以使用rake db:drop
. 删除数据库也将删除任何模式冲突或错误数据。如果您想保留您拥有的数据,请务必在运行此命令之前对其进行备份。
这是一篇关于最重要的rake 数据库命令的详细文章。
请遵循以下命令:
rails db:migrate:reset
rails db:seed
再次