RailsのSQLite3テーブルをCSVでインポート/エクスポートしてみました。
目次
環境
- Rails7.0.4
- wsl2(Debian11)
Railsの準備
アプリケーションフレームワークを作成します
$ rails new Library
SQLite3を操作するためのテストデータがあれば良いので、今回はscaffold
でリソースを作成します
$ rails g scaffold book title:string description:text
scaffold`で作成されたマイグレーションファイルから、データベースを作成します
$ rails db:migrate == 20221018080750 CreateBooks: migrating ====================================== -- create_table(:books) -> 0.0106s == 20221018080750 CreateBooks: migrated (0.0135s) =============================
Railsを起動します
$ rails server
データをいくつか登録してコンソールで確認します
$ rails console
irb(main):001:0> Book.all Book Load (0.1ms) SELECT "books".* FROM "books" => [#<Book:0x00007faeb62dcde8 id: 1, title: "こんにちは", description: "Hello", created_at: Tue, 18 Oct 2022 08:09:38.977918000 UTC +00:00, updated_at: Tue, 18 Oct 2022 08:09:38.977918000 UTC +00:00>, #<Book:0x00007faeb6297310 id: 2, title: "朝", description: "morning", created_at: Tue, 18 Oct 2022 08:10:09.200306000 UTC +00:00, updated_at: Tue, 18 Oct 2022 08:10:09.200306000 UTC +00:00>, #<Book:0x00007faeb6297248 id: 3, title: "雨", description: "rain", created_at: Tue, 18 Oct 2022 08:10:34.348508000 UTC +00:00, updated_at: Tue, 18 Oct 2022 08:10:34.348508000 UTC +00:00>]
データが登録されていることが確認できました
エクスポート
登録したデータをエクスポートしてみます
.headers
コマンドを使うと SELECT 文などでデータを取得し表示する時にヘッダーとしてカラム名を表示するかどうかを設定できます。
今回は.headers on
にしてみます
$ rails db sqlite> .headers on
CSVモードを指示します
sqlite> .mode csv
出力するCSV ファイルを指定します
sqlite> .output output.csv
データを選択し、data.csvファイルにエクスポートします
sqlite> SELECT * FROM books; sqlite> .quit
エクスポートできました output.csv
インポート
インポートしたいデータを作成します
CSVモードを指示します
$ rails db sqlite> .mode csv
ファイルを指定してBooksテーブルにインポートします。
sqlite> .import output.csv books
インポートできました