この記事では、Pythonを使用してPostgreSQLデータベースのパラメータ化クエリを効率よく実行する方法について詳しく解説します。具体的なコード例とその詳細な解説、および応用例を含めています。
目次
はじめに
SQLインジェクションは今日でも多くのウェブアプリケーションで問題となっています。その対策として有効なのがパラメータ化クエリです。PythonでPostgreSQLのパラメータ化クエリを効率よく実行するためにはいくつかのステップが必要です。
環境の設定
PythonでPostgreSQLに接続するためのライブラリとして、psycopg2を使用します。インストールは以下のコマンドで行えます。
pip install psycopg2
基本的なクエリの実行方法
基本的なSELECT文とINSERT文のパラメータ化クエリの例を示します。
import psycopg2
# データベースに接続
conn = psycopg2.connect(database="mydb", user="user", password="password", host="127.0.0.1", port="5432")
# カーソルオブジェクトの作成
cur = conn.cursor()
# SELECT文の実行(パラメータ化)
name = 'John'
cur.execute("SELECT * FROM employees WHERE name = %s", (name,))
print(cur.fetchall()) # 結果を表示
# INSERT文の実行(パラメータ化)
new_employee = ('Jane', 30)
cur.execute("INSERT INTO employees (name, age) VALUES (%s, %s)", new_employee)
# コミットと終了
conn.commit()
cur.close()
conn.close()
コードの詳細解説
1. psycopg2ライブラリをインポートします。
2. `psycopg2.connect`関数を用いてデータベースに接続します。
3. `cursor()`メソッドでカーソルオブジェクトを作成します。
4. `execute()`メソッドでSQLクエリを実行します。この際にパラメータを%記号で指定します。
5. SELECT文の場合は`fetchall()`メソッドで結果を取得し、表示します。
応用例
複数レコードの挿入
一度のクエリで複数のレコードを挿入する方法を示します。
# 複数レコードのデータ
employees = [('Alice', 25), ('Bob', 35), ('Charlie', 40)]
# executemany()を使用して複数レコードを挿入
cur.executemany("INSERT INTO employees (name, age) VALUES (%s, %s)", employees)
トランザクションの制御
コミットとロールバックを制御する例です。
try:
cur.execute("INSERT INTO employees (name, age) VALUES (%s, %s)", ('David', -1)) # 不正なデータ
conn.commit()
except:
conn.rollback()
まとめ
PythonでPostgreSQLのパラメータ化クエリを効率よく行うためには、psycopg2ライブラリを用いるのが一般的です。基本的なクエリの実行から、複数レコードの挿入、トランザクションの制御まで、幅広い応用が可能です。
コメント