0Pricing
Learn AI with Python · レッスン

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 column

if_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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Python の sqlite3 モジュールで SQLite を扱う
  2. Pandas と SQL の連携
  3. 機械学習の結果を保存・検索する
  4. ベクトルデータベース入門
← Learn AI with Pythonに戻る