2013-06-01 10 views
7

Wie kann ich die Daten in den Schienen sqlite3 db in eine Datei extrahieren?Extrahieren Sie Schienen db in JSON-Datei

Ich bin mit Schienen 4.

Ich möchte alle Daten in der Datenbank extrahieren, so kann ich es später erneut laden, wenn ich meine Datenbank zurückzusetzen, oder wenn ich zu einer anderen Art von db wechseln.

+0

Warum nehmen Sie nicht einfach Db Dump? – kiddorails

+0

Wie mache ich das? – Nayish

+0

antwortete unten als Antwort – kiddorails

Antwort

5

Verwenden Sie "yaml_db" gem. https://github.com/ludicast/yaml_db

rake db:data:dump 

Datendump (Daten in einer separaten Datei gespeichert wird, nachdem Dumping) und

rake db:data:load 

Daten an andere Datenbank laden

2

Erstellen Sie einfach eine DB-Dump-Datei Ihrer Datenbank und verwenden Sie sie wann Sie wollen.

Angenommen, Sie die Datenbank für db/development.sqlite3 dump wollen, dies direkt aus den Sqlite3 Help:

Verwenden Sie den „.dump“ Befehl den gesamten Inhalt einer Datenbank in eine einzige ASCII-Textdatei zu konvertieren. Diese Datei kann zurück in eine Datenbank konvertiert werden, indem sie zurück in sqlite3 geleitet wird.

die Dump-Datei zu erstellen:

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

die Dump-Datei wieder her:

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

Auf dem Dump bekomme ich: 'sh.exe": sqlite3: Befehl nicht gefunden " – Nayish

+0

Sie betreiben keine Remote-Maschine, nicht wahr' 'sqlite3' muss als ein Edelstein in Ihrem aktuellen Rails-Projektverzeichnis vorhanden sein Wenn Sie es in Ihrem Projekt verwenden – kiddorails

+0

Betrieb lokalen Rechner, sqlite3 ist ein Juwel in meinem aktuellen Rails-Projekt ... – Nayish

3

Ich bin vollkommen einverstanden mit .dump stattdessen ein json-Dump zu erzeugen. Aber nur aus Neugierde habe ich ein Skript geschrieben, um alle Modelle in json zu konvertieren.

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

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

all_records.to_json 

Aber es wird wahrscheinlich so lange dauern, in einer realen Umgebung mit vielen Datensätzen zu arbeiten.

Ein anderer Weg als Sqlite3 (was ich für diesen Fall empfehlen) ist nur eine Datei, kopieren Sie einfach die Datei db/development.sqlite3-db/development.sqlite3.backup. Wenn Sie es wiederherstellen möchten, kopieren Sie es einfach zurück cp -f db/development.sqlite3.backup db/development.sqlite3. Denken Sie daran, dass die .dump eine ASCII-Textdatei mit den Einfügungs- und Erstellungsanweisungen generiert. Sie können sie nicht in der Datenbank wiederherstellen, in die sie extrahiert wurde, da sie versuchen wird, die Datensätze zu duplizieren.

+0

Dies ist viel besser als mit Javaskript oder sqlite3 Befehle dabled. – Subhas

0

i alle db json zu extrahieren Verwenden benutzerfreundlichen phpmyadmin exportieren. Es erstellt leicht Export Json Daten für Ihre Datenbank. hoffe das wird dir helfen.

goto phpMyAdmin

Export/Typ json

2

Sie können einfach schreiben diese Zeile in Samen.rb

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

hier Post sollten mit Ihrem Modell den Namen ersetzt werden. dann im Terminal laufen:

rake db:seed 
Verwandte Themen