Ruby on rails 将rails数据库提取到JSON文件
如何将rails sqlite3 db中的数据提取到文件中? 我使用的是rails 4Ruby on rails 将rails数据库提取到JSON文件,ruby-on-rails,json,sqlite,dump,ruby-on-rails-4,Ruby On Rails,Json,Sqlite,Dump,Ruby On Rails 4,如何将rails sqlite3 db中的数据提取到文件中? 我使用的是rails 4 我想提取数据库中的所有数据,以便以后重置数据库或切换到其他类型的数据库时重新加载数据。只需创建数据库的数据库转储文件,并在需要时使用它即可 假设您希望转储数据库以用于db/development.sqlite3, 这直接来自于: 使用“.dump”命令转换数据库的全部内容 转换为单个ASCII文本文件。此文件可以转换回 通过管道将其返回到sqlite3 要创建转储文件,请执行以下操作: echo '.dump
我想提取数据库中的所有数据,以便以后重置数据库或切换到其他类型的数据库时重新加载数据。只需创建数据库的数据库转储文件,并在需要时使用它即可 假设您希望转储数据库以用于
db/development.sqlite3
,
这直接来自于:
使用“.dump
”命令转换数据库的全部内容
转换为单个ASCII文本文件。此文件可以转换回
通过管道将其返回到sqlite3
要创建转储文件,请执行以下操作:
echo '.dump' | sqlite3 db/development.sqlite3 | gzip -c > dev.dump.gz
zcat dev.dump.gz | sqlite3 development.sqlite3
要还原转储文件,请执行以下操作:
echo '.dump' | sqlite3 db/development.sqlite3 | gzip -c > dev.dump.gz
zcat dev.dump.gz | sqlite3 development.sqlite3
我完全同意
.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
生成一个包含INSERT和creates语句的ASCII文本文件,您无法在提取它的数据库中恢复它,因为它将尝试复制记录。使用“yaml_db”gem
转储数据
(数据转储后存储在单独的文件中)
及
为了将数据加载到其他数据库,我使用用户友好的phpmyadmin导出将所有数据库提取为json。它可以轻松地为您的数据库创建导出json数据。希望这对你有帮助 goto phpmyadmin
导出/键入json您可以在seeds.rb中简单地编写这一行
File.open("post.json", "w") { |f| f.write Post.all.to_json }
此处的Post
应替换为您的型号名称。
然后在终端运行:
rake db:seed
你为什么不直接使用数据库转储呢?回答如下:你不是在操作远程机器,对吗
sqlite3
如果您在项目中使用它,它必须作为gem存在于您当前的Rails项目目录中。这比使用javascript或sqlite3命令要好得多。