2013-06-01 19 views
7

Come posso estrarre i dati nei binari sqlite3 db in un file?Estrai binari da db a file JSON

sto usando le rotaie 4.

vorrei estrarre tutti i dati nel mio database in modo da poter ricaricare in un secondo momento, quando la I ha ripristinato il mio database, o quando passare a un diverso tipo di db.

+0

Perché non si prende semplicemente db dump? – kiddorails

+0

come faccio? – Nayish

+0

risponde come risposta – kiddorails

risposta

5

Utilizzare la gemma "yaml_db". https://github.com/ludicast/yaml_db

rake db:data:dump 

a dump dei dati (I dati sono memorizzati in un file separato dopo il dumping) e

rake db:data:load 

per caricare i dati di altri database

2

Basta creare un file di dettagli DB del database e utilizzarlo quando lo si desidera.

Supponendo che si desidera eseguire il dump del database per db/development.sqlite3, questo è direttamente dalla Sqlite3 Help:

utilizzare il comando ".dump" per convertire l'intero contenuto di una banca dati in un unico file di testo ASCII. Questo file può essere riconvertito in un database riassettandolo in sqlite3.

Per creare il file di dump:

echo '.dump' | sqlite3 db/development.sqlite3 | gzip -c > dev.dump.gz 

Per ripristinare il file di dump:

zcat dev.dump.gz | sqlite3 development.sqlite3 
+0

Sul dump viene visualizzato: 'sh.exe": sqlite3: comando non trovato' – Nayish

+0

Non si sta utilizzando una macchina remota, giusto? 'Sqlite3' deve essere presente come gemma nella directory corrente del progetto Rails se lo stai usando nel tuo progetto – kiddorails

+0

Operating local machine, sqlite3 è un gioiello nel mio attuale progetto Rails ... – Nayish

3

Sono totalmente d'accordo con .dump invece di generare una discarica JSON. Ma solo per curiosità ho scritto una sceneggiatura per convertire tutti i modelli in json.

Rails.application.eager_load! # To load all models app/models/**/*.rb 

all_records = ActiveRecord::Base.descendants.map &:all 

all_records.to_json 

Ma probabilmente ci vorrà molto tempo per esibirsi in un ambiente reale con molti record.

Un altro modo (che vi consiglio per questo caso) come Sqlite3 è solo un file, basta copiare il file db/development.sqlite3-db/development.sqlite3.backup. Quando si desidera recuperarlo, è sufficiente copiarlo cp -f db/development.sqlite3.backup db/development.sqlite3. Ricordare che lo .dump genera un file di testo ASCII con gli inserimenti e crea istruzioni, non è possibile recuperarlo nel database da cui è stato estratto, perché tenterà di duplicare i record.

+0

Questo è molto meglio che dilettarsi con i comandi javascript o sqlite3. – Subhas

0

ho usato per estrarre tutto db a JSON utilizzando l'esportazione phpmyadmin userfriendly. crea facilmente esportazione dei dati JSON per il tuo database. spero che questo ti possa aiutare.

goto phpMyAdmin

export/tipo JSON

2

È possibile semplice scrivere questa linea in semi.rb

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

qui Post dovrebbe essere sostituito con il nome del modello. quindi eseguire in terminale:

rake db:seed