Python入門トップページ


目次

  1. SQLite を利用してみよう
  2. SQLite でテーブルを作成してデータを投入してみよう
  3. MySQL の準備を行おう
  4. MySQL を利用してみよう
  5. MySQL でテーブルを作成してデータを投入してみよう

データベースを利用してみよう

SQLite を利用してみよう

データベースファイルのダウンロード

簡単なサンプルデータベースをGitHubで公開しています.まずここから db.sqlite をダウンロードして,Python のコードと同じフォルダに設置してください.

Windows のコマンドプロンプトや macOS のターミナルで SQLite を使って staffs.sqlite を利用する例を示します.staffs テーブルは「id」「name」「age」「department」という4つの列からなるテーブルで,7件のデータが保存されていることがわかります.

% sqlite3 db.sqlite ⏎
SQLite version 3.37.0 2021-12-09 01:34:53
Enter ".help" for usage hints.
sqlite> .tables ⏎
staffs
sqlite> .schema staffs ⏎
CREATE TABLE staffs (
    id INT NOT NULL,
    name VARCHAR(32),
    age INT,
    department VARCHAR(32),
    PRIMARY KEY(id)
);
sqlite> .headers ON ⏎
sqlite> SELECT * FROM staffs; ⏎
id|name|age|department
1|藤川|23|営業部
2|藤本|35|人事部
3|藤枝|32|製造部
4|藤原|48|営業部
5|藤森|44|人事部
6|藤平|28|製造部
7|藤谷|38|営業部
sqlite> .exit ⏎
%

目次に戻る

SQLite データベースで検索してみよう

SQLite データベースを利用するために,sqlite3 ライブラリをインポートします.


import sqlite3

次に,カレントフォルダ(Python コードと同じフォルダ)に設置された staffs.sqlite ファイルに接続して,カーソルを開きます.


conn = sqlite3.connect('db.sqlite')
curs = conn.cursor()

SQL文を発行して staffs テーブルから全てのレコードを検索します.なお SQL 文の最後に ; を入れていますが,この ; は省略可能です.


curs.execute("SELECT * FROM staffs;")
<sqlite3.Cursor at 0x7fd640b43f80>

検索結果を取り出して(フェッチして)表示します.


rows = curs.fetchall()
print(rows)
[(1, '藤川', 23, '営業部'), (2, '藤本', 35, '人事部'), (3, '藤枝', 32, '製造部'), (4, '藤原', 48, '営業部'), (5, '藤森', 44, '人事部'), (6, '藤平', 28, '製造部'), (7, '藤谷', 38, '営業部')]

次は年齢順で検索して表示します.


curs.execute("SELECT * FROM staffs ORDER BY age;")
rows = curs.fetchall()
print(rows)
[(1, '藤川', 23, '営業部'), (6, '藤平', 28, '製造部'), (3, '藤枝', 32, '製造部'), (2, '藤本', 35, '人事部'), (7, '藤谷', 38, '営業部'), (5, '藤森', 44, '人事部'), (4, '藤原', 48, '営業部')]

次は年齢の逆順に表示しますが,列の表示順も変更します.SQL文が長い時には,3重クォートを利用し,途中で改行すると良いでしょう.


curs.execute("""SELECT
  id, name, department, age
FROM
  staffs
ORDER BY age DESC;""")
rows = curs.fetchall()
print(rows)
[(4, '藤原', '営業部', 48), (5, '藤森', '人事部', 44), (7, '藤谷', '営業部', 38), (2, '藤本', '人事部', 35), (3, '藤枝', '製造部', 32), (6, '藤平', '製造部', 28), (1, '藤川', '営業部', 23)]

営業部に所属するスタッフの「id」と「name」だけを表示してみましょう.


curs.execute("SELECT id, name FROM staffs WHERE department = '営業部';")
rows = curs.fetchall()
print(rows)
[(1, '藤川'), (4, '藤原'), (7, '藤谷')]

もちろん for 構文を使って1件ずつ何らかの処理をすることも可能です.


for row in rows:
    print(row)
(1, '藤川')
(4, '藤原')
(7, '藤谷')

なお,データベースの利用を終える時には,カーソルを閉じて,データベースから切断することも忘れないようにしよう.


curs.close()
conn.close()

目次に戻る