Python と SQLAlchemy を使用したExperience Platform データの管理
作成対象:
- ユーザー
- 開発者
SQLAlchemy を使用してAdobe Experience Platform データの管理をより柔軟に行う方法を説明します。 SQL に詳しくないユーザーにとって、SQLAlchemy は、リレーショナル・データベースを使用する際の開発時間を大幅に短縮できます。 このドキュメントでは、SQLAlchemy をクエリサービスに接続し、Python を使用してデータベースとやり取りする手順と例を説明します。
SQLAlchemy は、SQL データベースに格納されたデータを Python のオブジェクトに転送できる ORM (Object Relational Mapper)および Python コード ライブラリです。 その後、コードを使用して、Experience Platform データレイク内に保持されているデータに対して CRUD 操作 Python 実行できます。 これにより、PSQL のみを使用してデータを管理する必要がなくなります。
はじめに
SQLAlchemy をExperience Platformに接続するために必要な資格情報を取得するには、Experience Platform UI のクエリワークスペースにアクセスできる必要があります。 現在、クエリワークスペースにアクセスできない場合は、組織の管理者にお問い合わせください。
Query Service 資格情報
資格情報を見つけるには、Experience Platform UI にログインし、左側のナビゲーションから クエリ を選択し、続いて 資格情報 を選択します。 ログイン資格情報の検索方法の詳細については、 資格情報ガイドを参照してください。
クエリサービスへの接続にはポート 80 をお勧めしますが、ポート 5432 を使用することもできます。
QS 認証情報にアクセスできるようになったら、任意の Python エディターを開きます。
Python に資格情報を保存
Python エディターで、urllib.parse.quote
ライブラリを読み込み、各資格情報変数をパラメーターとして保存します。 urllib.parse
モジュールは、URL 文字列をコンポーネントに分割する標準的なインターフェイスを提供します。 quote 関数は、URL 文字列内の特殊文字を置き換えて、データを URL コンポーネントとして安全に使用できるようにします。 必要なコードの例を以下に示します。
from urllib.parse import quote
host = "<YOUR_HOST>"
port = "<YOUR_PORT>"
dbname = "<YOUR_DATABASE>"
user = "<YOUR_USERNAME>"
password = quote('''
<YOUR_PASSWORD>
''')
エンジンインスタンスの作成 [#create-engine]
変数を作成した後、create_engine
関数をインポートし、SQLAlchemy でクエリサービスの認証情報をコンパイルしてフォーマットするための文字列を作成します。 次に、create_engine
関数を使用してエンジンインスタンスが作成されます。
create_engine
エンジンのインスタンスを返します。 ただし、接続を必要とするクエリが呼び出されるまで、クエリサービスへの接続は開きません。サードパーティのクライアントを使用してExperience Platformにアクセスする場合は、SSL を有効にする必要があります。 エンジンの一部として、connect_args
を使用して追加のキーワード引数を入力します。 SSL モードを require
に設定することをお勧めします。 使用可能な値について詳しくは、SSL モードのドキュメントを参照してください。
次の例は、エンジンと接続文字列を初期化するために必要な Python コードを示しています。
from sqlalchemy import create_engine
db_string = "postgresql://{user}:{password}@{host}:{port}/{dbname}".format(
user=user,
password=password,
host=host,
port = port,
dbname = dbname
)
engine = create_engine(db_string, connect_args={'sslmode':'require'})
これで、Python を使用してExperience Platform データをクエリする準備が整いました。 次の例では、クエリサービスのテーブル名の配列を返します。
from sqlalchemy import inspect
insp = inspect(engine)
print(insp.get_table_names())