subtitle

RaiseTechの各種コースをはじめとしたイロイロな学習の記録

Railsのデータベース(SQLite)の中身を直接扱う

「ネコを称えるツイート」アプリで登録したユーザーやツイートが、データベース上でどのように登録されているのかが気になったので、見てみる。


RailsのデフォルトのデータベースはSQLite3である。私もSQLite3をインストールして使っている。


SQLiteのデータベース本体は、db\development.sqlite3というファイル。

データベースの中身を見るために、ターミナルでコンソールを立ち上げるコマンドを打つ。

rails dbconsole

「sqlite>」という表示になればOK。



今あるテーブルを全て表示

.tables


現時点で存在するテーブルの一覧が表示される。


テーブルの構成を表示

.schema [テーブル名]


CREATE TABLE IF NOT EXISTS "users" (
"id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, 
"email" varchar DEFAULT '' NOT NULL, 
"encrypted_password" varchar DEFAULT '' NOT NULL, 
"reset_password_token" varchar, 
"reset_password_sent_at" datetime, 
"remember_created_at" datetime, 
"created_at" datetime(6) NOT NULL, 
"updated_at" datetime(6) NOT NULL);       

CREATE UNIQUE INDEX "index_users_on_email" ON "users" ("email");

CREATE UNIQUE INDEX "index_users_on_reset_password_token" ON "users" ("reset_password_token");

CREATE TABLE IF NOT EXISTS "tweets" (
"id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, 
"body" text, 
"user_id" integer, 
"created_at" datetime(6) NOT NULL, 
"updated_at" datetime(6) NOT NULL);


テーブルの内容を表示

これは普通にSQLを書けばOK。

select * from users;
select * from tweets;


sqlite> select * from users;
1|a@a|$2a$12$zF.GB3qpVi51u1JFFZpby.gRSlyaoMw08yJ3Id5.h.TYkXPmSLiLm||||2021-02-07 04:40:45.542872|2021-02-07 04:47:30.286894
3|c@example.com|$2a$12$kpls5Ks4AIUoaR5MsWpsienZCFp7lJw3N39TNU7aUVkY61eTPBFBW||||2021-02-07 05:28:05.516165|2021-02-07 05:46:04.506077
4|b@b|$2a$12$ZHykJ9M0KmnKEygZpatg3esU1ZyInpOSZZ8i60pJGkyyVJm0/WF2S||||2021-02-07 13:50:32.304258|2021-02-07 13:50:32.304258

sqlite> select * from tweets;
1|一つ目|1|2021-02-07 13:31:51.360225|2021-02-07 13:31:51.360225
2|一つ目|1|2021-02-07 13:31:53.860680|2021-02-07 13:31:53.860680
3|一つ目|1|2021-02-07 13:33:28.845603|2021-02-07 13:33:28.845603
4|2つ目|1|2021-02-07 13:34:37.795933|2021-02-07 13:34:37.795933
5|3つ目|1|2021-02-07 13:34:49.656390|2021-02-07 13:34:49.656390
6|Cの投稿1つ目|3|2021-02-07 13:35:46.003803|2021-02-07 13:35:46.003803
7|ネコカワイイ!!(*'ω'*)|1|2021-02-09 15:17:09.475970|2021-02-09 15:17:09.475970
8|お風呂のドアの外で待っているところがカワイイ!|1|2021-02-09 15:18:01.856668|2021-02-09 15:18:01.856668
9|お皿を洗っていると、足にお尻を乗せてくる|4|2021-02-09 15:19:28.878144|2021-02-09 15:19:28.878144
10|ネコ、昨日の水絶対飲まない(賢い!)|4|2021-02-09 15:27:50.930072|2021-02-09 15:27:50.930072
11|そこにいるだけでカワイイ!|4|2021-02-09 15:29:08.067910|2021-02-09 15:29:08.067910


テーブルのデータを消す

テーブルのデータを消すために、正しくデータが抽出できるかをselect文で確認しておく。

これをやっておかないと、思わぬところで本来消すべきでないデータをうっかり消してしまう可能性がある。

tweetテーブルの1番目のデータを削除したいので、そのデータが正しく抽出できているかをまず確認する。

select * from tweets where id = 1;


sqlite> select * from tweets where id = 1;   
1|一つ目|1|2021-02-07 13:31:51.360225|2021-02-07 13:31:51.360225


意図通りにwhere句が機能しているので、データを消す。

delete from tweets where id = 1;



sqlite> delete from tweets where id = 1;
sqlite> select * from tweets;
2|一つ目|1|2021-02-07 13:31:53.860680|2021-02-07 13:31:53.860680
3|一つ目|1|2021-02-07 13:33:28.845603|2021-02-07 13:33:28.845603
4|2つ目|1|2021-02-07 13:34:37.795933|2021-02-07 13:34:37.795933
5|3つ目|1|2021-02-07 13:34:49.656390|2021-02-07 13:34:49.656390
6|Cの投稿1つ目|3|2021-02-07 13:35:46.003803|2021-02-07 13:35:46.003803
7|ネコカワイイ!!(*'ω'*)|1|2021-02-09 15:17:09.475970|2021-02-09 15:17:09.475970
8|お風呂のドアの外で待っているところがカワイイ!|1|2021-02-09 15:18:01.856668|2021-02-09 15:18:01.856668
9|お皿を洗っていると、足にお尻を乗せてくる|4|2021-02-09 15:19:28.878144|2021-02-09 15:19:28.878144
10|ネコ、昨日の水絶対飲まない(賢い!)|4|2021-02-09 15:27:50.930072|2021-02-09 15:27:50.930072
11|そこにいるだけでカワイイ!|4|2021-02-09 15:29:08.067910|2021-02-09 15:29:08.067910
sqlite>

1つ目のデータが消えていることが分かる。



コンソールの終了

終了させる場合は、.quit と打てばデータベースクライアントが停止する。