SQLite3を使ってみる


SQLite3(エスキューライト3)はファイルベース(MySQLのようなサーバは不要)の軽量なデータベースになります。

SQLite Home Page


ラズベリーパイOSであれば、

$ sudo apt update
$ sudo apt install sqlite3

でSQLite3をインストールするだけで使えるようになります。




データベースにデータを挿入した後に値の確認という流れを見てみます。


データベースにデータを挿入する為には、テーブルを用意する必要があります。

テーブルとはデータを整理して保存するための表のようなものになります。


SQLite3を起動して、ユーザに関するテーブルを作ってみます。

# 下記コマンドでSQLite3を起動する
$ sqlite3

※ sqlite3の後にデータベースのファイル名を指定しますが、今回は指定していないので、インメモリモードでの起動になります。

SQLite version 3.40.1 2022-12-28 14:03:47
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>

下記の内容を入力して実行してみます。

sqlite> CREATE TABLE users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name VARCHAR,
        money INTEGER
);

※ sqlite>の箇所の入力は不要です。


これでユーザに関するテーブルが出来ました。


余談ですが、SQLiteに限らず、SQLの記述で操作できるデータベースで、データベースに対しての命令の事をクエリ(Query)と呼びます。


作成したテーブルの確認は

sqlite> .schema users

※ usersは今回作成しましたテーブル名になります。

で確認できます。

CREATE TABLE users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name VARCHAR,
        money INTEGER
);

今回作成したテーブルはユーザID(id)、お名前(name)と所持金(money)の3個のカラムを持ったものになりまして、各カラム名の横にあるINTEGERやVARCHARは各カラムが持つデータの形の指定になります。


INTEGERは整数(負の整数もあり)で、取り扱える値の範囲は膨大なのでこの場では触れません。

VARCHARは可変長の文字列で、可変長は文字列の長さが決まっていない時に指定します。

※ SQLiteではVARCHAR型はTEXT型として認識されるそうです。

※ SQLiteで使用できるデータ型はDatatypes In SQLite#Affinity Name Examplesに記載があり、

データ型 説明 該当する宣言例
TEXT 文字列データ。UTF-8などで保存されます。 TEXT, VARCHAR, CHAR
INTEGER 符号付き整数。値に合わせてサイズが自動調整されます。 INT, INTEGER, BIGINT
REAL 浮動小数点数。 REAL, DOUBLE, FLOAT
BLOB バイナリデータ。画像やファイルをそのまま保存します。 BLOB
NUMERIC 数値全般。日付や真偽値もここに含まれます。 NUMERIC, DECIMAL, DATE, BOOLEAN

になります。


idカラムのみに付いているPRIMARY KEYは重複してはいけない値になります。

ユーザIDは重複すると意味をなさなくなりますので、そのようなカラムの時につけておきます。


AUTOINCREMENTは数字を自動で、かつ重複しないように1ずつ増やして割り振ってくれる機能になります。

※ SQLiteの場合はAUTOINCREMENTの指定がなくてもPRIMARY KEYのみでも良いです。


CREATE TABLEの基本構文は下記になります。

CREATE TABLE テーブル名 (
    カラム名1 データ型 制約,
    カラム名2 データ型 制約,
    ...
    テーブル制約
);

※ クエリ実行の際は改行の有り無しは関係ありません。

※ テーブル制約は今回は触れません。




データを挿入してみます。

sqlite> INSERT INTO users (id, name, money) VALUES (1, "太郎", 100);

※ PRIMARY KEYを指定しているカラムであれば下記のように省略可能です。

sqlite> INSERT INTO users (name, money) VALUES ("太郎", 100);

データの挿入はINSERT INTOクエリで行います。

INSERT INTO テーブル名
            (カラム名1, カラム名2, カラム名3...)
     VALUES (値1, 値2, 値3...)

()でデータを挿入したいカラムを指定して、VALUES()句で指定したカラムに対応した値を指定します。

※ INSERT INTOやVALUESは小文字でも可


挿入したデータを確認してみます。

sqlite> SELECT * FROM users;

を実行してみると、

1|太郎|100

のような出力になります。


上記のクエリで、usersテーブルから全てのデータを取得するという意味になります。


SELECTの基本構文は下記になります。

SELECT * FROM テーブル名;



SQLite3を終了する時は

sqlite> .exit

を実行します。

京都の東本願寺で開催されているプログラミング教室で講師をしています。
詳しくはTera schoolを御覧ください。
マインクラフト用ビジュアルエディタを開発しています。

詳しくはinunosinsi/mcws_blockly - githubをご覧ください。