SQLクエリの実行

PythonでSQLクエリを実行する方法について、以下に詳しく説明します。代表的なデータベースとして SQLite を例に取り上げますが、MySQLやPostgreSQLでも基本的な流れは共通です。


1. 必要なモジュールのインポート

SQLiteの場合は標準ライブラリの sqlite3 モジュールを使用します。

python
import sqlite3

MySQL や PostgreSQL を使う場合は、それぞれ mysql.connectorpsycopg2 などの外部ライブラリを使います。


2. データベースに接続する

python
conn = sqlite3.connect('example.db') # SQLiteのデータベースに接続(存在しなければ作成)

MySQLやPostgreSQLでは、ホスト名、ユーザー名、パスワード、データベース名などが必要になります。


3. カーソルオブジェクトの取得

SQL文を実行するには、カーソルオブジェクトを使用します。

python
cursor = conn.cursor()

4. SQLクエリの実行

a. テーブルの作成(DDL)

python
cursor.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, name TEXT, age INTEGER ) ''')

b. データの挿入(INSERT)

python
cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Alice', 30))

値のバインドには ? を使い、タプルで値を渡すことが推奨されます(SQLインジェクション対策)。

c. データの取得(SELECT)

python
cursor.execute('SELECT * FROM users') rows = cursor.fetchall() for row in rows: print(row)

d. データの更新(UPDATE)

python
cursor.execute('UPDATE users SET age = ? WHERE name = ?', (31, 'Alice'))

e. データの削除(DELETE)

python
cursor.execute('DELETE FROM users WHERE name = ?', ('Alice',))

5. 変更を保存する

INSERT、UPDATE、DELETE などの操作を行った後は、コミットが必要です。

python
conn.commit()

6. 接続を閉じる

python
cursor.close() conn.close()

注意点

  • プレースホルダには直接変数を埋め込まず、必ず ? または %s を使用します(DBMSによって異なります)。

  • 大量のデータを扱う場合は executemany() を使うと効率的です。

  • 例外処理(try-except)を用いて接続や実行エラーをハンドリングすることが推奨されます。

生成日:2025/05/03