Pandas と SQL の連携
pd.read_sql()、df.to_sql()、SQLAlchemy engine を使い、データベースの結果を DataFrame に直接取り込みます。
「Pandas と SQL の連携」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
pandasとSQLの連携
SQLとpandasのどちらか一方を選ぶ必要はありません。両者は連携して使えます。データベースをDataFrameに読み込み、pandasで変換し、結果をデータベースに書き戻します。
その橋渡しをするのが、SQLAlchemyと、pandasの read_sql および to_sql 関数です。
SQLAlchemyを使う理由
pandasは、接続またはSQLAlchemyのエンジンを介してデータベースと通信します。エンジンがデータベースの種類を抽象化するため、URLを変更するだけで、SQLite、PostgreSQL、MySQLなどに同じコードを使えます。
エンジンの作成
create_engine は接続URLを受け取ります。URLのスキームによってデータベースドライバーが決まります。
from sqlalchemy import create_engine
engine = create_engine("sqlite:///ml.db")
# Postgres: create_engine("postgresql://user:pass@host:5432/db")pd.read_sqlによるテーブルの読み込み
pd.read_sql はクエリを実行するかテーブルを読み込み、DataFrameを返します。SQL文字列とエンジンを渡してください。
import pandas as pd
df = pd.read_sql("SELECT * FROM experiments", engine)
print(df.head())絞り込んだクエリによる読み込み
絞り込みや集計はデータベースに任せ、結果を小さくしてからpandasに渡します。すべてのデータを読み込むより、はるかに効率的です。
df = pd.read_sql(
"SELECT name, accuracy FROM experiments WHERE accuracy > 0.85 ORDER BY accuracy DESC",
engine,
)
print(df)パラメーター化クエリ
文字列をフォーマットするのではなく、params 引数を使ってクエリパラメーターを安全に渡します。
from sqlalchemy import text
df = pd.read_sql(
text("SELECT * FROM experiments WHERE name = :n"),
engine,
params={"n": "xgb"},
)df.to_sqlによるDataFrameの書き込み
df.to_sql(table, engine) はDataFrameをデータベースのテーブルに書き込みます。必要に応じて、DataFrameのdtypeをもとにテーブルを作成します。
df.to_sql("results", engine, index=False)indexパラメーター
デフォルトでは、to_sql はDataFrameのインデックスを列として書き込みます。通常は不要なので、index=False を渡して省略します。
df.to_sql("results", engine, index=False) # no extra index columnif_existsパラメーター
if_exists は、テーブルがすでに存在する場合の動作を制御します。
"fail"— エラーを発生させる(デフォルト)"replace"— テーブルを削除して再作成する"append"— 既存のテーブルに行を追加する
df.to_sql("results", engine, if_exists="append", index=False)
# Use "replace" to overwrite, "fail" to be safeデータを往復させるワークフロー
典型的なパイプラインは、SQLから生データを読み込み、pandasで変換し、クリーニングした結果を新しいテーブルに書き戻すという流れです。
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine("sqlite:///ml.db")
raw = pd.read_sql("SELECT * FROM experiments", engine)
raw["accuracy_pct"] = (raw["accuracy"] * 100).round(1)
raw.to_sql("experiments_clean", engine, if_exists="replace", index=False)大きなテーブルの分割読み込み
メモリに収まらない大きさのテーブルでは、read_sql に chunksize を渡し、結果をバッチ単位で反復処理します。
for chunk in pd.read_sql("SELECT * FROM big_table", engine, chunksize=10000):
process(chunk) # handle 10k rows at a timeクイックチェック:行の追加
既存のテーブルを削除せずに、新しい行を追加するよう to_sql を使いたいとします。
振り返り:pandasとSQL
これで、pandasとデータベースの間でデータを移動できるようになりました。
- データベースに依存しない接続を作る
create_engine(url) - クエリ結果をDataFrameに読み込む
pd.read_sql(query, engine) - データを書き戻す
df.to_sql(table, engine, index=False, if_exists=...) - 安全性と大規模処理に役立つパラメーター化クエリと
chunksize
次は、機械学習の実験結果を保存してクエリします。
よくある質問
「Pandas と SQL の連携」レッスンは無料ですか?
はい。「Pandas と SQL の連携」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「Pandas と SQL の連携」で何を学びますか?
pd.read_sql()、df.to_sql()、SQLAlchemy engine を使い、データベースの結果を DataFrame に直接取り込みます。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Pandas と SQL の連携」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Python の sqlite3 モジュールで SQLite を扱う
- Pandas と SQL の連携
- 機械学習の結果を保存・検索する
- ベクトルデータベース入門