すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:SQLAlchemy の統合

最終更新日:Jul 18, 2026

PyODPS は SQLAlchemy と統合されており、標準的な SQLAlchemy 構文を使用して MaxCompute データをクエリできます。接続を作成し、SQLAlchemy API を呼び出してテーブルの作成、データの挿入、クエリの実行が可能です。

接続の作成

以下の手順で接続を作成します。

import os
from sqlalchemy import create_engine

# ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数にご利用の AccessKey ID を、
# ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数にご利用の AccessKey Secret を設定してください。
# セキュリティの観点から、接続文字列内に AccessKey ID および AccessKey Secret をハードコードしないでください。
conn_string = 'odps://%s:%s@<project>/?endpoint=<endpoint>' % (
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
)
engine = create_engine(conn_string)
conn = engine.connect()
  • ALIBABA_CLOUD_ACCESS_KEY_ID:対象の MaxCompute プロジェクトへのアクセス権限を持つ AccessKey ID です。環境変数として設定することを推奨します。

    AccessKey ID は AccessKey Pair ページで取得できます。

  • ALIBABA_CLOUD_ACCESS_KEY_SECRET:ご利用の AccessKey ID に対応する AccessKey Secret です。環境変数として設定することを推奨します。

    AccessKey Secret は AccessKey Pair ページで取得できます。

  • project:対象の MaxCompute プロジェクトの名前です。

    これはワークスペース名ではなく、MaxCompute プロジェクト名を指します。プロジェクト名を確認するには、MaxCompute コンソール にログインし、左側のナビゲーションウィンドウで ワークスペース > プロジェクト管理 を選択します。

  • endpoint:対象の MaxCompute プロジェクトが配置されているリージョンのエンドポイントです。

    リージョン別のエンドポイント一覧については、「Endpoints」をご参照ください。

既存の ODPS オブジェクト o があり、o.to_global() を呼び出してグローバル ODPS オブジェクトとして設定済みの場合、接続文字列から上記のパラメーターを省略できます。例:

from sqlalchemy import create_engine
o.to_global()  # ODPS オブジェクトをグローバルに設定
engine = create_engine('odps://')

SQLAlchemy API の使用

以下の例では、テーブルの作成、データの挿入、データのクエリの方法を示します。

  • テーブルの作成

    from sqlalchemy import Table, Column, Integer, String, MetaData
    metadata = MetaData()
    
    users = Table('users', metadata,
        Column('id', Integer),
        Column('name', String),
        Column('fullname', String),
    )
    
    metadata.create_all(engine)
  • データの挿入

    ins = users.insert().values(id=1, name='jack', fullname='Jack Jones')
    conn.execute(ins)
  • データのクエリ

    from sqlalchemy.sql import select
    s = select([users])
    result = conn.execute(s)
    for row in result:
        print(row)

    期待される出力:

    (1, 'jack', 'Jack Jones')