RailsのSQLite3テーブルをCSVでインポート/エクスポートする

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

インポート

$ rails db sqlite> .mode csv

インポートしたいデータを作成します

CSVモードを指示します

$ rails db
sqlite> .mode csv

ファイルを指定してBooksテーブルにインポートします。

sqlite> .import output.csv books

インポートできました

参考にした書籍/サイト