SQLからデータを取得してPandasのDataFrameに変換する際、read_sql()メソッドは非常に便利です。この記事では、SQLのWHERE句にパラメータを渡す方法を、具体例を交えて解説します。
🔧 基本構文
import pandas as pd
df = pd.read_sql(sql,con)sql: 実行したいSQL文(SELECT文など)con: データベース接続情報(ODBCやSQLAlchemyなど)
🎯 WHERE句にパラメータを渡すには?
SQL文に動的な条件を指定したい場合、params引数を使います。
✅ 1つのパラメータを渡す場合
sql = "SELECT * FROM テーブル名 WHERE 項目1 = ?"
df = pd.read_sql(sql, con, params=[value1])
?はプレースホルダー(クエスチョンマーク)paramsに渡した値が?に順番に代入されます
✅ 複数のパラメータを渡す場合
sql = "SELECT * FROM テーブル名 WHERE 項目1 = ? AND 項目2 = ?"
df = pd.read_sql(sql, con, params=[value1, value2])
paramsのリストと?の数は一致させる必要があります
💡 よくあるつまずきポイント
- SQL文中の
?を忘れるとエラーになります paramsの順番と?の順番が一致していないと、意図しない結果になります
📝 まとめ
| 使用ケース | SQL文 | Pythonコード |
|---|---|---|
| パラメータなし | "SELECT * FROM テーブル名" | pd.read_sql(sql, con) |
| パラメータ1つ | "SELECT * FROM テーブル名 WHERE 項目1 = ?" | pd.read_sql(sql, con, params=[value1]) |
| パラメータ複数 | "SELECT * FROM テーブル名 WHERE 項目1 = ? AND 項目2 = ?" | pd.read_sql(sql, con, params=[value1, value2]) |
このように、read_sql()のparams引数を使えば、SQL文に柔軟に条件を渡すことができます。特に実務では、ユーザー入力や動的な条件に応じてSQLを組み立てる場面が多いため、覚えておくと非常に便利です。


コメント