如何将rails sqlite3 db中的数据提取到文件中?
我正在使用rails 4.
我想提取数据库中的所有数据,以便稍后在重置数据库时或者当我切换到不同类型的数据库时重新加载它。
答案 0 :(得分:5)
使用“yaml_db”gem。 https://github.com/ludicast/yaml_db
rake db:data:dump
转储数据 (转储后数据存储在单独的文件中) 和
rake db:data:load
将数据加载到其他数据库
答案 1 :(得分:3)
我完全同意.dump
而不是生成json转储。但只是出于好奇,我写了一个脚本将所有模型转换成json。
Rails.application.eager_load! # To load all models app/models/**/*.rb
all_records = ActiveRecord::Base.descendants.map &:all
all_records.to_json
但在具有许多记录的真实环境中执行可能需要很长时间。
另一种方式(我推荐这种情况),因为Sqlite3只是一个文件,只需将文件db/development.sqlite3
复制到db/development.sqlite3.backup
即可。如果要恢复它,只需将其复制回cp -f db/development.sqlite3.backup db/development.sqlite3
即可。请记住,.dump
生成带有插入和创建语句的ASCII文本文件,您无法在提取它的数据库中恢复它,因为它会尝试复制记录。
答案 2 :(得分:2)
只需创建数据库的数据库转储文件,并在需要时使用它。
假设您要转储db/development.sqlite3
的数据库,
这直接来自Sqlite3 Help:
使用“
.dump
”命令转换数据库的全部内容 到一个ASCII文本文件。此文件可以转换回 数据库通过管道返回到sqlite3。
创建转储文件:
echo '.dump' | sqlite3 db/development.sqlite3 | gzip -c > dev.dump.gz
恢复转储文件:
zcat dev.dump.gz | sqlite3 development.sqlite3
答案 3 :(得分:2)
您可以在 seeds.rb
中简单地写下这一行File.open("post.json", "w") { |f| f.write Post.all.to_json }
此处Post
应替换为您的模型名称。
然后在终端运行:
rake db:seed
答案 4 :(得分:0)
我曾经使用用户友好的phpmyadmin导出将所有数据库提取到json。它可以轻松地为您的数据库导出json数据。希望这会帮助你。
转到phpmyadmin
export / type json