如何将 rails sqlite3 db 中的数据提取到文件中?
我正在使用rails 4。
我想提取数据库中的所有数据,以便稍后在重置数据库或切换到不同类型的数据库时重新加载它。
如何将 rails sqlite3 db 中的数据提取到文件中?
我正在使用rails 4。
我想提取数据库中的所有数据,以便稍后在重置数据库或切换到不同类型的数据库时重新加载它。
使用“yaml_db”gem。 https://github.com/ludicast/yaml_db
rake db:data:dump
转储数据(转储后数据存储在单独的文件中)和
rake db:data:load
将数据加载到其他数据库
我完全同意.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 文本文件,您无法在提取它的数据库中恢复它,因为它会尝试复制记录。
你可以在seeds.rb中简单地写下这一行
File.open("post.json", "w") { |f| f.write Post.all.to_json }
此处Post
应替换为您的模型名称。然后在终端中运行:
rake db:seed
只需创建数据库的 DB 转储文件并在需要时使用它。
假设您想转储数据库db/development.sqlite3
,这直接来自Sqlite3 帮助:
使用“
.dump
”命令将数据库的全部内容转换为单个 ASCII 文本文件。这个文件可以通过管道返回到 sqlite3 来转换回数据库。
创建转储文件:
echo '.dump' | sqlite3 db/development.sqlite3 | gzip -c > dev.dump.gz
要恢复转储文件:
zcat dev.dump.gz | sqlite3 development.sqlite3
我曾经使用用户友好的 phpmyadmin 导出将所有 db 提取到 json。它为您的数据库轻松创建导出 json 数据。希望这会帮助你。
转到 phpmyadmin
导出/输入 json