9

如何将 rails sqlite3 db 中的数据提取到文件中?

我正在使用rails 4。

我想提取数据库中的所有数据,以便稍后在重置数据库或切换到不同类型的数据库时重新加载它。

4

5 回答 5

5

使用“yaml_db”gem。 https://github.com/ludicast/yaml_db

rake db:data:dump

转储数据(转储后数据存储在单独的文件中)和

rake db:data:load

将数据加载到其他数据库

于 2013-06-07T07:11:20.907 回答
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.sqlite3db/development.sqlite3.backup. 当您想恢复它时,只需将其复制回来cp -f db/development.sqlite3.backup db/development.sqlite3。请记住,.dump生成带有插入和创建语句的 ASCII 文本文件,您无法在提取它的数据库中恢复它,因为它会尝试复制记录。

于 2013-06-01T21:16:45.887 回答
3

你可以在seeds.rb中简单地写下这一行

File.open("post.json", "w") { |f| f.write Post.all.to_json }

此处Post应替换为您的模型名称。然后在终端中运行:

rake db:seed
于 2015-06-25T05:57:25.783 回答
2

只需创建数据库的 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
于 2013-06-01T20:54:41.157 回答
0

我曾经使用用户友好的 phpmyadmin 导出将所有 db 提取到 json。它为您的数据库轻松创建导出 json 数据。希望这会帮助你。

转到 phpmyadmin

导出/输入 json

于 2013-06-12T14:31:09.710 回答