注:このチュートリアルでは、非推奨バージョンのUbuntuを使用しています。 Ubuntu 20.04 用に作成された更新バージョンを読むには、ここをクリックしてください。

Sqliteは、非常にシンプルで高速なオープンソースSQLエンジンです。 このチュートリアルでは、MysqlやPostgresなどの本格的なRDBMSとは対照的に、Sqliteを使用するのが最適な場合と、それをインストールする方法、およびCRUD(作成、読み取り、更新、削除)をカバーする基本的な使用例について説明します。

誤解


Sqliteはテストと開発専用であると誤解しないでください。 たとえば、1日に最大100,000ヒットを受信するWebサイトでは正常に機能しますが、これは控えめな制限です。 Sqliteデータベースの最大サイズは140テラバイト(これで十分でしょう?)であり、本格的なRDBMSよりも大幅に高速化できます。 完全なデータベースと他のすべての必要なデータは、ホストのファイルシステムの通常のファイルに保存されるため、個別のサーバープロセスは必要ありません(遅いプロセス間通信の必要性をすべて排除します)。

VPSでの最適な使用法


Sqliteはシンプルさに焦点を当てています。 完全に内部であるため、多くの場合、他の方法よりも大幅に高速です。 移植性(言語とプラットフォームの両方に関して)、シンプルさ、速度、および小さなメモリフットプリントを探している場合は、Sqliteが理想的です。 その欠点は、高い読み取りまたは書き込みの同時実行性が必要な場合にのみ明らかになります。Sqliteは一度に1つのライターしかサポートできず、多くのクライアントがSqliteデータベースに同時にアクセスする必要がある場合、通常は高いファイルシステムレイテンシが不便になる可能性があります。 最後に考えられる欠点は、その構文は他のSQLシステムと似ていますが、一意であるということです。 別のシステムに移行するのはかなり簡単ですが、Sqliteを「成長」させると、移行にいくらかのオーバーヘッドが発生します。

詳細については、公式ドキュメント内にSqliteの長所と短所に関する非常に優れた概要がいくつかあります。

VPSにSqliteをインストールします


sqlite3モジュールは標準のPythonライブラリの一部であるため、標準のUbuntuインストールまたはPythonがインストールされているシステムでは、それ以上のインストールは厳密には必要ありません。 UbuntuにSqliteコマンドラインインターフェイスをインストールするには、次のコマンドを使用します。

sudo apt-get update
sudo apt-get install sqlite3 libsqlite3-dev

ソースからコンパイルする必要がある場合は、公式SQLiteWebサイトから最新のautoconfバージョンを入手してください。 執筆時点:

wget http://sqlite.org/2013/sqlite-autoconf-3080100.tar.gz
tar xvfz sqlite-autoconf-3080100.tar.gz
cd sqlite-autoconf-3080100
./configure
make
make install

(ソースからビルドする場合の注意:1)標準のUbuntuインストールでは、これを行わないでください。すでにインストールされているバージョンと新しくインストールされたバージョンの競合が原因で、「ヘッダーとソースバージョンの不一致」エラーが発生する可能性があります。 2)makeコマンドがさらなる入力を期待しているように思われる場合は、ソースのコンパイルに時間がかかる可能性があるため、しばらくお待ちください)。

基本的なコマンドラインインターフェイスの使用法


データベースを作成するには、次のコマンドを実行します。

sqlite3 database.db

ここで、「database」はデータベースの名前です。 ファイルdatabase.dbがすでに存在する場合、Sqliteはそのファイルへの接続を開きます。 存在しない場合は作成されます。 次のような出力が表示されます。

SQLite version 3.8.1 2013-10-17 12:57:35
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>

次に、テーブルを作成してデータを挿入しましょう。 「wines」という名前のこのテーブルには、ID、ワインの生産者、ワインの種類、およびワインの原産国の4つの列があります。 まだ金曜日ではないため、データベースに挿入するワインは3つだけです。

CREATE TABLE wines (id integer, producer varchar(30), kind varchar(20), country varchar(20)); 
INSERT INTO WINES VALUES (1, "Rooiberg", "Pinotage", "South Africa");
INSERT INTO WINES VALUES (2, "KWV", "Shiraz", "South Africa");
INSERT INTO WINES VALUES (3, "Marks & Spencer", "Pinot Noir", "France");

データベース、テーブル、およびいくつかのエントリを作成しました。 次に、Ctrl + Dを押してSqliteを終了し、次のように入力します(ここでも、データベースの名前を「database」に置き換えます)。これにより、作成したデータベースに再接続されます。

sqlite3 database.db

次のように入力します。

SELECT * FROM wines;

そして、今作成したエントリが表示されます。

1|Rooiberg|Pinotage|South Africa
2|KWV|Shiraz|South Africa
3|Marks & Spencer|Pinot Noir|France

素晴らしい。 作成と読み取りは以上です。 更新して削除しましょう:

UPDATE wines SET country="South Africa" WHERE country="France";

これによりデータベースが更新されるため、フランス産としてリストされているすべてのワインは、代わりに南アフリカ産としてリストされます。 結果を確認してください:

SELECT * FROM wines;

そして、あなたは見るべきです:

1|Rooiberg|Pinotage|South Africa
2|KWV|Shiraz|South Africa
3|Marks & Spencer|Pinot Noir|South Africa

現在、私たちのワインはすべて南アフリカ産です。 お祝いにKWVを飲み、データベースから削除しましょう。

DELETE FROM wines WHERE id=2;
SELECT * FROM wines;

そして、セラーにリストされているワインが1つ少なくなるはずです。

1|Rooiberg|Pinotage|South Africa
3|Marks & Spencer|Pinot Noir|South Africa

そして、それはすべての基本的なデータベース操作をカバーしています。 終了する前に、2つのテーブルと基本的な結合を使用するもう1つの(少し)些細な例を試してみましょう。

コマンドCtrl + Dを使用してSqliteを終了し、sqlite3 database2.dbを使用して新しいデータベースに再接続します。

非常によく似たwinesテーブルを作成しますが、国の名前と現在の大統領を格納するcountriesテーブルも作成します。 最初にcountriesテーブルを作成し、それに南アフリカとフランスを挿入しましょう(一度に数行のsqliteコードをコピーして貼り付けることができることに注意してください)。

CREATE TABLE countries (id integer, name varchar(30), president varchar(30));
INSERT INTO countries VALUES (1, "South Africa", "Jacob Zuma");
INSERT INTO countries VALUES(2, "France", "Francois Hollande");

そして、次の方法でワインテーブルを再作成できます。

CREATE TABLE wines (id integer, kind varchar(30), country_id integer);
INSERT INTO wines VALUES (1, "Pinotage", 1);
INSERT INTO wines VALUES (2, "Shiraz", 1);
INSERT INTO wines VALUES (3, "Pinot Noir", 2);

それでは、南アフリカにどのような種類のワインがあるかを見てみましょう。

SELECT kind FROM wines JOIN countries ON country_id=countries.id WHERE countries.name="South Africa";

そして、あなたは見るべきです:

Pinotage
Shiraz

そして、それは基本的な結合をカバーしています。 Sqliteがあなたのためにたくさんのことをすることに注意してください。 上記のjoinステートメントでは、キーワードJOINを使用していますが、デフォルトはINNER JOINです。 また、明確であるため、wines.country_idを指定する必要はありません。 一方、コマンドを試してみると、次のようになります。

SELECT kind FROM wines JOIN countries ON country_id=id WHERE country_id=1;

エラーメッセージError: ambiguous column name: idが表示されます。 両方のテーブルにid列があるので、これは十分に公平です。 しかし、一般的にSqliteはかなり寛容です。 そのエラーメッセージは、問題を見つけて修正することをかなり簡単にする傾向があり、これは開発プロセスをスピードアップするのに役立ちます。

構文の詳細については、公式ドキュメントにこのような図がたくさんあります。これは役立つ場合がありますが、具体的な例が必要な場合は、ここにチュートリアルへのリンクがあります。ほとんどの結合タイプ

最後に、Sqliteにはすべての主要言語のラッパーとドライバーがあり、ほとんどのシステムで実行できます。 [それらの多くのリストはここにあります]( http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers “target =” _ blank)。