「日経ソフトウェア2022年11月号 特集3 Python デスクトップアプリを作ろう」を実行してみました。
サンプルプログラム
サンプルプログラムは日経ソフトウェアのWebからダウンロードできます。
以下URLから「本誌バックナンバーを見る」→「2022年11月号」→「「特集3 Pythonでデスクトップアプリを作ろう 後編」(t32211.zip))」
Part1 SQLite3の基本をマスターしよう
sqlite3モジュールをインポートし、データベースを作成します。
実行すると実行フォルダにsample.dbというデータベースのファイルが作成されます。
テーブルの作成
SQLite3で使用できるデータ型は以下の通りです。
データ型 | 説明 | 対応するPythonの型 |
---|---|---|
BLOB | Binary Large Object | bytes |
INTEGER | INTEGER | int |
REAL | 浮動小数 | float |
TEXT | テキスト | str |
NULL | NULL | None |
SQLite3の制約は以下の通りです。
制約 | 説明 |
---|---|
NOT NULL | 列がnull値を持てないようにする |
DEFAULT | 列の値が指定されていないときに代わりに入力される値を指定する |
UNIQUE | 同じ列のすべての値が異なっていることを保証するため、同じ値を入力できないようにする |
PRIMARY KEY | 主キーとなる制約。NOT NULLとUNIQUEの制約をもつ |
CHECK | 入力データが指定した条件に対してFALSEの場合は入力できないようにする |
personalデータ例
sample.dbに「personalテーブル」を作成します。
テーブルはid(識別番号) 、name(名前)、height(身長)、weight(体重) で構成します。
作成するデータは以下の通りです。
id | name | height | weight |
---|---|---|---|
001 | Yamada Taro | 173 | 62.5 |
002 | Tanaka Hanako | 163 | 53.1 |
003 | Suzuki Saburo | 180 | 75.8 |
テーブルは CREATE TABLE で作成します。
CREATE TABLE テーブル名 (
列名1 データ型 制約1 制約2・・,
列名2 データ型 制約1 制約2・・,
列名3 データ型 制約1 制約2・・,
・・・
)
プログラム例です。
データベースに接続したあと、cursorというオブジェクトを作成します。
cursorオブジェクトでデータベースの操作を行います。
execute関数を使用してCREATE TABLEを実行しています。
INSERT INTOでデータを追加
作成したpersonalテーブルにデータを追加するには、INSERT INTOを使用します。
INSERT INTO
テーブル名 (列名1、列名2、・・・)
VALUE (値1、値2・・・)
プログラム例です。
execute関数を使用してデータを入力します。
最後にcommitを実行します。(実行しないとデータベースにデータが追加されません。)
SELCT文でデータを抽出
データベースに接続されたデータはSELECT文で抽出できます。
記述方法は、以下のようになります。
① SELECT 列名1,列名2,・・・FROM テーブル名
② SELECT * FROM テーブル名
③ SELECT * FROM テーブル名 WHERE 条件
プログラム例です。
for 変数 in cur.execute("SELECT ・・・")で抽出されたデータが変数に代入されます。
実行結果
('002', 'Tanaka Hanako', 163, 53.1)
('003', 'Suzuki Saburo', 180, 75.8)
('001', 'Yamada Taro', 173, 62.5)
('002', 'Tanaka Hanako', 163, 53.1)
WHEREの後に記述できる条件演算子は以下になります。
演算子 | 説明 |
---|---|
BETWEEN 値1 AND 値2 | 値1と値2の範囲内の値かどうか |
IN(値1、値2、値3・・) | 一致する値があるか |
NOT IN(値1、値2、値3・・) | 一致する値がないか |
LIKE 文字パターン | 文字パターンに一致するかどうか |
IS NULL | NULLかどうか |
IS NOT NULL | NULLでないかどうか |
BETWEENとINを使用したプログラム例です。
実行結果
('001', 'Yamada Taro', 173, 62.5)
('003', 'Suzuki Saburo', 180, 75.8)
('003', 'Suzuki Saburo', 180, 75.8)
LIKEを使用したプログラム例です。
実行結果
('002', 'Tanaka Hanako', 163, 53.1)
('001', 'Yamada Taro', 173, 62.5)
('003', 'Suzuki Saburo', 180, 75.8)
('003', 'Suzuki Saburo', 180, 75.8)
ORDER BY句でデータをソート
ORDER BY句を使用するとSELECTで抽出したデータをソートすることができます。
ソートしたい列名をORDER BYのうしろに記述すればよいです。デフォルトは昇順です。降順する場合は最後にDESCをつけます。
以下、プログラム例です。
実行結果
('002', 'Tanaka Hanako', 163, 53.1)
('001', 'Yamada Taro', 173, 62.5)
('003', 'Suzuki Saburo', 180, 75.8)
('003', 'Suzuki Saburo', 180, 75.8)
('001', 'Yamada Taro', 173, 62.5)
('002', 'Tanaka Hanako', 163, 53.1)
テーブルの削除
テーブルの削除は DROP TABLE テーブル名で削除できます。