著者は、 Write for DOnations プログラムの一環として、 Free and Open SourceFundを選択して寄付を受け取りました。
序章
SQLite は、無料のクロスプラットフォームデータベース管理システムです。 効率性と多くの異なるプログラミング言語とのインターフェース能力で人気があります。
このチュートリアルでは、Ubuntu20.04にSQLiteをインストールします。 次に、データベースを作成し、そこからデータを読み取り、アイテムを挿入し、アイテムを削除し、別々のテーブルからアイテムを結合します。
注:このチュートリアルには、SQLiteをインストールして使用するための実用的な手順が含まれています。 SQLiteデータベースの使用を検討すべきかどうかなど、より大きな概念上の問題や本番環境の問題については説明していません。 人気のあるリレーショナルデータベースの優れた概要とそれらの比較については、 SQLiteとMySQLとPostgreSQL:リレーショナルデータベース管理システムの比較の記事をご覧ください。
さらに、多くの言語はSQLiteとの統合を維持しています。 Pythonコード内でSQLiteを使用する手順については、チュートリアル Python3でsqlite3モジュールを使用する方法を確認してください。
前提条件
このチュートリアルを完了するには、次のものが必要です。
- Ubuntu20.04を実行しているローカルマシンまたはサーバー。 ルート以外のsudoユーザーとファイアウォールを含むサーバーをセットアップするには、 Ubuntu 20.04を実行するDigitalOceanDropletを作成してから、初期サーバーセットアップガイドに従います。
ステップ1—Ubuntu20.04にSQLiteをインストールする
UbuntuにSQLiteコマンドラインインターフェイスをインストールするには、最初にパッケージリストを更新します。
sudo apt update
次にSQLiteをインストールします。
sudo apt install sqlite3
インストールを確認するには、ソフトウェアのバージョンを確認します。
sqlite3 --version
次のような出力が表示されます。
Output3.31.1 2020-01-27 19:55:54 3bfa9cc97da10598521b342961df8f5f68c7388fa117345eeb516eaa837balt1
SQLiteをインストールすると、新しいデータベースを作成する準備が整います。
ステップ2—SQLiteデータベースを作成する
このステップでは、さまざまなサメとその属性を含むデータベースを作成します。 データベースを作成するには、ターミナルを開き、次のsqlite3コマンドを実行します。
sqlite3 sharks.db
これにより、sharksという名前の新しいデータベースが作成されます。 ファイルsharks.dbがすでに存在する場合、SQLiteはそのファイルへの接続を開きます。 存在しない場合は、SQLiteが作成します。
次のような出力が表示されます。
OutputSQLite version 3.31.1 2020-01-27 19:55:54 Enter ".help" for usage hints.
これに続いて、プロンプトが変わります。 新しいプレフィックスsqlite>が表示されます。
ファイルsharks.dbがまだ存在せず、クエリを実行せずにsqliteプロモートを終了すると、ファイルsharks.dbは作成されません。 ファイルが確実に作成されるようにするには、;と入力し、「Enter」を押して空のクエリを実行できます。 そうすれば、データベースファイルが実際に作成されたことを確認できます。
Sharkデータベースを作成したら、新しいテーブルを作成してデータを入力します。
ステップ3—SQLiteテーブルを作成する
SQLiteデータベースはテーブルに編成されています。 テーブルには情報が格納されます。 テーブルをよりよく視覚化するために、行と列を想像することができます。
このチュートリアルの残りの部分では、SQLiteコマンドを入力するための一般的な規則に従います。 SQLiteコマンドは大文字で、ユーザー情報は小文字です。 行はセミコロンで終了する必要があります。
次に、さまざまなデータ用のテーブルといくつかの列を作成しましょう。
- ID
- サメの名前
- サメの種類
- サメの平均の長さ(センチメートル)
次のコマンドを使用して、テーブルを作成します。
CREATE TABLE sharks(id integer NOT NULL, name text NOT NULL, sharktype text NOT NULL, length integer NOT NULL);
NOT NULLを使用すると、そのフィールドが必須になります。 NOT NULLについては、次のセクションで詳しく説明します。
テーブルを作成した後、空のプロンプトが返されます。 それでは、いくつかの値を挿入しましょう。
テーブルへの値の挿入
SQLiteでは、テーブルに値を挿入するためのコマンドは、次の一般的な形式に従います。
INSERT INTO tablename VALUES(values go here);
ここで、tablenameはテーブルの名前であり、valuesは括弧内にあります。
次に、VALUESの3行をsharksテーブルに挿入します。
INSERT INTO sharks VALUES (1, "Sammy", "Greenland Shark", 427); INSERT INTO sharks VALUES (2, "Alyoshka", "Great White Shark", 600); INSERT INTO sharks VALUES (3, "Himari", "Megaladon", 1800);
以前にテーブル内の各変数にNOT NULLを指定したため、それぞれに値を入力する必要があります。
たとえば、長さを設定せずに別のサメを追加してみてください。
INSERT INTO sharks VALUES (4, "Faiza", "Hammerhead Shark");
次のエラーが表示されます。
OutputError: table sharks has 4 columns but 3 values were supplied
このステップでは、テーブルを作成し、それに値を挿入しました。 次のステップでは、データベーステーブルから読み取ります。
ステップ4—SQLiteでテーブルを読み取る
このステップでは、テーブルからデータを読み取る最も基本的な方法に焦点を当てます。 SQLiteがテーブル内のデータを表示するためのより具体的な方法を提供することを認識してください。
挿入されたすべての値を含むテーブルを表示するには、SELECTを使用します。
SELECT * FROM sharks;
以前に挿入されたエントリが表示されます。
Output1|Sammy|Greenland Shark|427 2|Alyoshka|Great White Shark|600 3|Himari|Megaladon|1800
id(手動で設定した値)に基づいてエントリを表示するには、クエリにWHEREコマンドを追加します。
SELECT * FROM sharks WHERE id IS 1;
これにより、idが1と等しいサメが返されます。
Output1|Sammy|Greenland Shark|427
このコマンドを詳しく見てみましょう。
- まず、データベース
sharksからすべての(*)値をSELECTします。 - 次に、すべての
id値を確認します。 - 次に、
idが1と等しいすべてのテーブルエントリを返します。
これまでに、テーブルを作成し、そこにデータを挿入し、保存されたデータを照会しました。 次に、既存のテーブルを更新します。
ステップ5—SQLiteでテーブルを更新する
次の2つのセクションでは、最初に既存のテーブルに新しい列を追加してから、テーブルの既存の値を更新します。
SQLiteテーブルへの列の追加
SQLiteでは、ALTER TABLEコマンドを使用してテーブルを変更できます。 これは、新しい行と列を作成したり、既存の行と列を変更したりできることを意味します。
ALTER TABLEを使用して新しい列を作成します。 この新しいコラムでは、各サメの年齢を年単位で追跡します。
ALTER TABLE sharks ADD COLUMN age integer;
これで、5番目の列ageができました。
SQLiteテーブルの値を更新する
UPDATEコマンドを使用して、各サメに新しいage値を追加します。
UPDATE sharks SET age = 272 WHERE id=1; UPDATE sharks SET age = 70 WHERE id=2; UPDATE sharks SET age = 40 WHERE id=3;
Output1|Sammy|Greenland Shark|427|272 2|Alyoshka|Great White Shark|600|70 3|Himari|Megaladon|1800|40
このステップでは、テーブルの構成を変更してから、テーブル内の値を更新しました。 次のステップでは、テーブルから情報を削除します。
ステップ6—SQLiteで情報を削除する
このステップでは、引数の評価に基づいてテーブル内のエントリを削除します。
次のコマンドでは、データベースにクエリを実行し、sharksテーブル内の年齢が200歳未満のすべてのサメを削除するように要求しています。
DELETE FROM sharks WHERE age <= 200;
SELECT * FROM sharks;と入力すると、それぞれ200年未満のAlyoshkaとHimariが削除されたことが確認されます。 残っているのはSammyのみです。
Output1|Sammy|Greenland Shark|427|272
ステップ7—SQLiteで情報を結合する
現在のsharksテーブルとendangeredテーブルの2つのテーブルがあると想像してみてください。 ここで、endangeredテーブルにsharksテーブルのidにマップされたid値があり、[ X132X]各サメの保全状況を示す値?
両方のテーブルのデータをクエリする場合は、SQLiteの4つの結合コマンドのいずれかを使用できます。
INNER JOINOUTER JOINLEFT JOINCROSS JOIN
その2番目のテーブルを作成してから、INNER JOINを使用していくつかのデータを結合しましょう。
まず、endangeredテーブルを作成します。
CREATE TABLE endangered (id integer NOT NULL, status text NOT NULL); INSERT INTO endangered VALUES (1, "near threatened");
次に、テーブルを結合します。
SELECT * FROM sharks INNER JOIN endangered on sharks.id = endangered.id;
出力は次のようになります。
Output1|Sammy|Greenland Shark|427|272|1|near threatened
出力には、endangeredからのid値も含まれることに注意してください。 より明示的なコマンドを使用して、目的の出力を指定できます。
SELECT sharks.id, sharks.name, sharks.sharktype, sharks.length, sharks.age, endangered.status FROM sharks INNER JOIN endangered on sharks.id = endangered.id;
今回の出力では、2番目のid値が除外されています。
Output1|Sammy|Greenland Shark|427|272|near threatened
これで、複数のテーブルからの情報を正常に結合できました。
結論
SQLiteはデータベース管理に便利なツールです。 データベースをすばやく作成し、さまざまなコマンドで操作できます。 このチュートリアルに続いて、SQLiteの基本を理解し、このデータベース管理システムをさらに深く理解する準備が整いました。
リレーショナルデータベースシステムの優れた概要とそれらの比較については、 SQLiteとMySQLとPostgreSQL:リレーショナルデータベース管理システムの比較の記事をご覧ください。
さらに、多くの言語はSQLiteとの統合を維持しています。 Pythonコード内でSQLiteを使用する手順については、チュートリアル Python3でsqlite3モジュールを使用する方法を確認してください。
SQLiteの構文に関する具体的なヘルプについては、公式ドキュメントがもう1つの優れたリソースです。