結論。自分の理解まとめ。
- データベース。RDBMS。だけどサーバーではなく、1つのファイルに完結して作成される。
- ファイルなので、コピペすれば移行できるし、バックアップにもなる。
- ファイルで、自己完結しているので、インストールアプリ等に組み込みで使える。
- ロックするときは、ファイルなのでDB全体になる。つまり、同時実行性が低いので、複数アクセスに向かないし、大規模システムにも向かない。個別で利用されるアプリやテスト用にパパっと使いたい場合が向いてそう。
- オープンソース。パブリックドメインなので、ライセンスの心配が不要。
- データの型を決めなくても、色んな種類のデータを1つのカラムに格納できる。データの型を自動で判別してくれる。
SQLiteって何???
SQLiteはオープンソースのRDBMS(リレーショナルデータベース管理システム)。RDBMS仲間としてはMySQLとかPostreSQL、OracleDBなどが有名。
パブリックドメインなので、自由に改変したり、ライセンスの心配が不要です。
普通のDBは専用サーバー用意することが多いですが、SQLiteはファイルで管理します。ファイルなので、アプリに組み込んで使ったりすることが多いようです。
単一ファイルにDBが作られるため、ライブラリーのような感覚。サーバーへ認証接続したり、DBの起動停止するなどが不要で、簡易的に利用できます。
SQLiteと他DBの違い
他のDBと比べての弱点としては、ロックがDB全体になることです。
ロックは、複数のユーザーが同時にデータ更新するときに、一方が操作している間は、他者が操作できる範囲を制限したりする等で、整合性を保つようにすることです。
他のDBだと、DB全体ではなくテーブル単位など、ロックを局所化することができる場合がありますが、SQLiteは全体なので、お互い違うテーブルに対する操作でも、ロックが解除されるのを待たなければなりません。
つまり、同時に実行すること、同時実行性が弱いと言えます。
また、ファイルベースなので、ローカルにあるファイルにアクセスする形になります。
自サーバーで完結するなら問題ないと思いますが、複数サーバーからアクセスしたい(外部からローカルファイルにアクセスする形)場合は、少々面倒だと思います。その場合はMySQL等で、素直にDBサーバーを作る方が良いです。
なので、SQLiteはテスト時やインストールするアプリ等で使えそうです。1ユーザーだけでアクセスが少なくて、可用性を気にしない場合ですね。
SQLiteの特徴
SQLiteは型を決めなくてもよい。1カラムにいろんなデータ型を入れれます。
普通のDBであれば、テーブルのカラムごとに「文字列」「数値」等を指定します。しかし、SQLiteはデータ型を指定せずともテーブルを作成可能です。
適当に格納できるテスト用のDBを用意したい場合などは、便利です。
もちろん、型を指定することも可能ですし、指定せずとも格納されたデータの型をSQLiteが自動的に判別してくれます。
SQLiteを使うには?
SQLiteはファイルで完結しているので、ユーザーとしてはインストール不要です。
開発者として、そもそものDBファイルを作ったり操作したいため、操作のためのプログラムはダウンロードしたいです。SQLiteのファイルにアクセスするためのインターフェースの一つとしてsqlite3があります。以下のリンクからダウンロードサイトへ移動します。
https://www.sqlite.org/download.html
上記ページで、「Precompiled Binaries for ●●(OS名)」の欄から対応するbit数のZIPをダウンロードします。
後は、ZIPを解凍して、コマンドプロンプト等で解凍したディレクトリに移動。
sqlite3を実行することで、sqlite3を起動できます。
「sqlite3 db名.拡張子」でDB作成。
もしくは「sqlite3」を実行し、.open db名.拡張子で指定のDBをオープン。無い場合は新規で作られる。
その後、「.databases」か「.dat」で現在オープン中のDBを確認できる。
「.exit」か「.quit」でsqlite3を終了できる。
詳しいコマンドの種類は検索等で調べてください。
また、コマンド打ってデータを参照したり作成するのも良いが、UI操作をしたいときはコレを使っています。DB Browser for SQLite。SQLiteのDBを管理するソフトです。以下のリンクからダウンロードできます。
もしくは窓の杜
https://forest.watch.impress.co.jp/library/software/sqldbbrowser/
PythonでSQLiteを使いたいが、どうやって使えるようにするのか?
SQLiteを使い、操作するためのインターフェースはPythonの標準ライブラリにデフォルトで含まれているらしいです。
上手くいかない場合は、「pip install pysqlite3」コマンドを使用して、明示的にパッケージをダウンロードすると良いかもです。
実際にプログラムで使うときは、「import sqlite3」でインポートし、sqlite3のライブラリを使ってDB操作します。