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

MaxCompute:SQLAlchemy

最終更新日:Jan 07, 2025

PyODPSはSQLAlchemyと統合されています。 SQLAlchemyを使用して、MaxComputeのデータを照会できます。 このトピックでは、SQLAlchemyをMaxComputeプロジェクトに接続し、SQLAlchemyインターフェイスを呼び出す方法について説明します。

SQLAlchemyをMaxComputeプロジェクトに接続する

構文

import os
from sqlalchemy import create_engine

# Set the environment variable ALIBABA_CLOUD_ACCESS_KEY_ID to your AccessKey ID. 
# Set the environment variable ALIBABA_CLOUD_ACCESS_KEY_SECRET to the AccessKey secret of the Alibaba Cloud account. 
# We recommend that you do not directly use your AccessKey ID or 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ペアページからAccessKey IDを取得できます。

  • ALIBABA_CLOUD_ACCESS_KEY_SECRET: AccessKey IDに対応するAccessKeyシークレット。 このパラメーターを環境変数に設定することを推奨します。

    AccessKeyペアページからAccessKey secretを取得できます。

  • project: アクセスするMaxComputeプロジェクトの名前。

    このパラメーターには、MaxComputeプロジェクトが対応するDataWorksワークスペースではなく、MaxComputeプロジェクトの名前を指定します。 MaxComputeコンソールにログインできます。 上部のナビゲーションバーで、リージョンを選択します。 左側のナビゲーションウィンドウで、[ワークスペース] > [プロジェクト] を選択して、MaxComputeプロジェクトの名前を表示します。

  • endpoint: MaxComputeプロジェクトが存在するリージョンのエンドポイントです。

    異なるリージョンのMaxComputeのエンドポイントの詳細については、「エンドポイント」をご参照ください。

既存のODPSオブジェクトoの場合、o.to_global() メソッドを呼び出してオブジェクトをグローバルオブジェクトとして設定する場合、接続文字列に上記のパラメーターを指定する必要はありません。 サンプル文:

from sqlalchemy import create_engine
o.to_global()  # set ODPS object as global one
engine = create_engine('odps://')

SQLAlchemyインターフェイスを呼び出す

SQLAlchemyをMaxComputeプロジェクトに接続した後、SQLAlchemyインターフェイスを呼び出すことができます。 次のステートメントは、テーブルの作成、テーブルへのデータの挿入、およびテーブルからのデータの照会方法を示しています。

  • テーブルの作成

    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')