このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Python入門】データベースをSQLで操作する

ここでは、Pythonを使ってリレーショナルデータベースをSQLで操作する方法を学びます。Webアプリケーションをはじめ、多くのシステムではデータを効率的に保存・検索・更新するためにデータベースが必須となります。
ここでは、SQLiteを例に、PythonからSQL文を発行する一連の手順(データベースの作成・テーブルの作成・データ追加や変更など)を紹介します。データベースの基本的な扱いを身につけることで、今後のWebプログラミングやサービス開発をより強固なものにできるでしょう。

プログラムのダウンロード
「ダウンロード」から実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。
1.SQLとリレーショナルデータベースの基本
- リレーショナルデータベース(RDB)
・データを行と列からなる「テーブル」の形式で格納。
・テーブル同士の関係(リレーション)を管理し、大量データの高速検索や更新が可能。 - SQL(エスキューエル)
・RDBに対して操作を行うための共通言語。
・検索(SELECT)、追加(INSERT)、更新(UPDATE)、削除(DELETE)などの命令を発行。
Python からは、RDBMS にSQL文を送ることで、テーブルの作成・編集やデータの検索などを行います。
2.SQLiteを使ったデータベースの作成
2.1.sqlite3モジュールのインポート
PythonにはSQLite用のドライバが標準搭載されており、追加インストール不要です。以下のようにインポートします。
import sqlite3
2.2.データベースに接続してテーブルを作成
データベースファイル(例: shop.db
)が存在しない場合は新規に作成されます。以下は「account
テーブルを削除→作成」する例です。
「create_database.py」の内容
import sqlite3
def create_database():
# shop.db に接続(存在しない場合は作成)
con = sqlite3.connect('shop.db')
cur = con.cursor()
# テーブルが存在すれば削除
cur.execute("DROP TABLE IF EXISTS account")
# user(ユーザ)と password(パスワード)の2列を持つtableを作成
cur.execute("CREATE TABLE account (user TEXT PRIMARY KEY, password TEXT)")
con.commit()
con.close()
if __name__ == "__main__":
create_database()
print("Database and table created.")
sqlite3.connect('shop.db')
: DBファイルに接続。cursor()
: SQL文を実行するためのカーソルを取得。execute(sql)
: SQL文を実行(テーブル作成や削除など)。commit()
: 変更を確定。close()
: 接続を閉じる。
3.データを登録(INSERT)・取得(SELECT)
3.1.INSERTでデータを追加
複数行まとめて追加したい場合はexecutemany()
が便利です。以下の例ではユーザ名とパスワードをタプルで渡し、DBに登録します。
「insert_users.py」の内容
import sqlite3
def insert_users():
con = sqlite3.connect('shop.db')
cur = con.cursor()
account_data = [
('suzuki', 'abc123'),
('sato', 'def456'),
('takahashi', 'ghi789')
]
# INSERT文の?部分にそれぞれタプルの要素が代入される
cur.executemany("INSERT INTO account VALUES (?, ?)", account_data)
con.commit()
con.close()
print("Inserted users:", account_data)
if __name__ == "__main__":
insert_users()
3.2.SELECTでデータを取得
テーブルからデータを取り出すには、SELECT
文を実行し、その結果を1行ずつ読み取ります。以下の例で取得した行はタプルとして取得できます。
「show_users.py」の内容
import sqlite3
def show_users():
con = sqlite3.connect('shop.db')
cur = con.cursor()
cur.execute("SELECT * FROM account")
for user, password in cur: # 1行ずつのタプル (user, password)
print(f"{user:10} {password}")
con.close()
if __name__ == "__main__":
show_users()
for user, password in cur:
: カーソルをイテレータとして扱い、各行(タプル)を受け取る。
4.データの更新(UPDATE)・削除(DELETE)
4.1.UPDATE
UPDATE account SET password=? WHERE user=?
のように条件を指定できます。たとえばユーザsuzukiのパスワードを変更する例です。
「update_password.py」の内容
import sqlite3
def update_password(user, new_pass):
con = sqlite3.connect('shop.db')
cur = con.cursor()
cur.execute("UPDATE account SET password=? WHERE user=?", (new_pass, user))
con.commit()
con.close()
print(f"Updated {user}'s password to {new_pass}")
if __name__ == "__main__":
update_password("suzuki", "password")
4.2.DELETE
条件に合う行を削除する場合はDELETE
文を使います。
「delete_user.py」の内容
import sqlite3
def delete_user(user):
con = sqlite3.connect('shop.db')
cur = con.cursor()
cur.execute("DELETE FROM account WHERE user=?", (user,))
con.commit()
con.close()
print(f"Deleted user: {user}")
if __name__ == "__main__":
delete_user("takahashi")
5.ログイン機能の例
データベースのテーブルを使い、ユーザ名とパスワードによるログイン判定を行う簡単なサンプルです。ユーザ名・パスワードが正しければ「Welcome!」そうでなければ「Failed.」と表示します。
「login.py」の内容
import sys
import sqlite3
def login(user, passwd):
con = sqlite3.connect('shop.db')
cur = con.cursor()
# user列とpassword列が両方一致する行を検索
cur.execute("SELECT * FROM account WHERE user=? AND password=?", (user, passwd))
# 結果が空でなければログイン成功
result = list(cur)
con.close()
if result:
print("Welcome!")
else:
print("Failed.")
if __name__ == "__main__":
if len(sys.argv) != 3:
sys.exit(f"Usage: python {sys.argv[0]} <user> <password>")
login(sys.argv[1], sys.argv[2])
実行例
> python login.py suzuki abc123
Failed.
> python login.py suzuki password
Welcome!
まとめ
リレーショナルデータベースを用いると、大量データや複雑な検索条件にも容易に対応でき、Webアプリや業務システムで幅広く活用されます。Pythonからはsqlite3
モジュールを使って
connect
でDBに接続cursor
でSQL文を実行commit
で変更を反映close
で接続終了
という手順で操作します。データの追加・参照・更新・削除などの基本処理はSQL文(INSERT / SELECT / UPDATE / DELETE)を用い、それらを組み合わせることでユーザ管理やログイン機能などを構築可能です。
次のコンテンツでは、データベースとWebプログラミングを連携させ、Webアプリケーションとしての機能を作成していきます。Webフォームからデータを受け取り、DBに登録し、またブラウザで検索結果を表示するといった流れをマスターして、より実践的なシステム開発を体験しましょう。