Tablestore の Python SDK は、ワイドテーブルモデルおよび時系列モデルに対する操作をサポートします。
クイックスタート
環境の準備、SDK のインストール、およびクライアントの初期化を行うことで、Tablestore の Python SDK を統合します。
前提条件
Python 実行環境をダウンロードしてインストールします。Python のバージョンを確認するには、python3 --version コマンドを実行します。
バージョン 6.0.0 以降では、Python SDK は Python 3 のみをサポートし、Python 2 はサポートされません。Python 2 を使用する場合は、バージョン 5.4.4 以前を使用してください。
SDK のインストール
開発環境に応じて、適切なインストール方法を選択してください。コード例が正しく実行されるよう、最新バージョンの SDK を使用することを推奨します。
pip を使用したインストール(推奨)
以下のコマンドを実行して、Tablestore の Python SDK をインストールします。
pip3 install tablestoreGitHub からのインストール
git コマンドを使用して GitHub から Tablestore の SDK をダウンロードし、インストールします。
以下のコマンドを実行して SDK をダウンロードします。
git clone https://github.com/aliyun/aliyun-tablestore-python-sdk.git以下のコマンドを実行して、SDK インストールパッケージのフォルダに移動します。
cd aliyun-tablestore-python-sdk以下のコマンドを実行して SDK をインストールします。
python3 setup.py install
ソースコードからのインストール
SDK のソースコードをダウンロードしてインストールします。
Python SDK をダウンロードして解凍します。
SDK パッケージを解凍したフォルダに移動します。
以下のコマンドを実行して SDK をインストールします。
python3 setup.py install
アクセス認証情報の構成
AccessKey の作成を、Alibaba Cloud アカウントまたは RAM ユーザーに対して実行します。その後、以下に示すとおり、環境変数として AccessKey を構成します。環境変数で AccessKey を構成すると、機密情報をコード内にハードコーディングせずに済むため、セキュリティが向上します。
構成が完了したら、開発環境を再起動またはリフレッシュする必要があります。これには、IDE、コマンドラインインターフェイス、その他のデスクトップアプリケーション、およびバックグラウンドサービスが含まれます。これにより、最新のシステム環境変数が読み込まれます。その他の種類のアクセス認証情報については、「アクセス認証情報の構成」をご参照ください。
Linux
-
以下のコマンドを実行して、環境変数設定を
~/.bashrcファイルに追加します。echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc -
以下のコマンドを実行して、変更を適用します。
source ~/.bashrc -
以下のコマンドを実行して、環境変数が有効であることを確認します。
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET
macOS
-
ターミナルで以下のコマンドを実行し、デフォルトのシェルタイプを確認します。
echo $SHELL -
デフォルトのシェルタイプに応じて、以下の操作を行います。
Zsh
-
以下のコマンドを実行して、環境変数設定を
~/.zshrcファイルに追加します。echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc -
以下のコマンドを実行して、変更を適用します。
source ~/.zshrc -
以下のコマンドを実行して、環境変数が有効であることを確認します。
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET
Bash
-
以下のコマンドを実行して、環境変数設定を
~/.bash_profileファイルに追加します。echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile -
以下のコマンドを実行して、変更を適用します。
source ~/.bash_profile -
以下のコマンドを実行して、環境変数が有効であることを確認します。
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET
-
Windows
CMD
-
コマンドプロンプト (CMD) で以下のコマンドを実行して、環境変数を設定します。
setx TABLESTORE_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx TABLESTORE_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET" -
CMD を再起動し、以下のコマンドを実行して、環境変数が有効であることを確認します。
echo %TABLESTORE_ACCESS_KEY_ID% echo %TABLESTORE_ACCESS_KEY_SECRET%
PowerShell
-
PowerShell で以下のコマンドを実行します。
[Environment]::SetEnvironmentVariable("TABLESTORE_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::SetEnvironmentVariable("TABLESTORE_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User) -
以下のコマンドを実行して、環境変数が有効であることを確認します。
[Environment]::GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
クライアントの初期化
以下のコードは Tablestore クライアントを初期化し、指定されたインスタンス内のすべてのデータテーブルおよび時系列テーブルを一覧表示することで、接続を検証します。
新規インスタンスでは、デフォルトでパブリックネットワークアクセスが無効になっています。インスタンス上のリソースにパブリックネットワーク経由でアクセスするには、インスタンスの ネットワーク管理 設定でパブリックネットワークアクセスを有効化できます。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import sys
from tablestore import OTSClient
def main():
try:
# 環境変数からアクセス認証情報を取得します。TABLESTORE_ACCESS_KEY_ID および TABLESTORE_ACCESS_KEY_SECRET が設定されていることを確認してください。
access_key_id = os.getenv("TABLESTORE_ACCESS_KEY_ID")
access_key_secret = os.getenv("TABLESTORE_ACCESS_KEY_SECRET")
# TODO: 以下の値をご利用のインスタンスの詳細に置き換えてください。
instance_name = "n01k********" # インスタンス名
endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com" # インスタンスエンドポイント
# クライアントインスタンスを作成します。
client = OTSClient(endpoint, access_key_id, access_key_secret, instance_name)
# データテーブルを一覧表示します。
resp = client.list_table()
print(f"インスタンス '{instance_name}' 内で {len(resp)} 個のデータテーブルが見つかりました:")
for table_name in resp:
print(f"{table_name}")
# 時系列テーブルを一覧表示します。
resp = client.list_timeseries_table()
print(f"\nインスタンス '{instance_name}' 内で {len(resp)} 個の時系列テーブルが見つかりました:")
for tableMeta in resp:
print(f"{tableMeta.timeseries_table_name}")
except Exception as e:
print(f"操作が失敗しました:{str(e)}")
sys.exit(1)
if __name__ == "__main__":
main()バージョン互換性
現在のバージョンは 6.x.x です。以下に、それ以前のバージョンとの互換性について説明します。
SDK の 5.x.x シリーズと互換があります。
5.4.x、5.3.x、および 5.2.x の各バージョンは互換があります。ただし、5.2.1 および 5.1.0 の各バージョンは、以下のケースで互換性がありません:
Searchメソッドの戻り値の型。5.1.0 以前のバージョンでは、このメソッドはデフォルトで
Tupleオブジェクトを返します。バージョン 5.2.0 以降では、デフォルトでSearchResponseオブジェクトを返します。SearchResponseオブジェクトは__iter__メソッドを実装しており、反復処理が可能です。Tupleオブジェクトを返すには、SearchResponse.v1_response()メソッドを使用します。新しい
ParallelScanメソッド。デフォルトでは、このメソッドは
ParallelScanResponseオブジェクトを返します。Tupleオブジェクトを返すには、ParallelScanResponse.v1_response()メソッドを使用します。
SDK の 4.x.x シリーズと互換があります。
SDK の 2.x.x シリーズとの互換性はありません。2.x.x シリーズのバージョンでは順序不同のプライマリキーがサポートされていますが、バージョン 4.0.0 以降ではサポートされていません。非互換性には、以下が含まれます。
パッケージ名が
ots2からtablestoreに変更されました。TableOptionsパラメーターがClient.create_tableメソッドに追加されました。put_row、get_row、update_rowなどのメソッドにおいて、primary_keyパラメーターの型がdictからlistに変更され、プライマリキーの順序が保証されるようになりました。put_rowおよびupdate_rowなどのメソッドにおいて、attribute_columnsパラメーターの型がdictからlistに変更されました。put_rowおよびupdate_rowなどのメソッドにおいて、timestampがattribute_columnsパラメーターに追加されました。get_rowやget_rangeなどのメソッドには、現在、max_version and time_rangeパラメーターが含まれています。これらの 2 つのパラメーターのうち、少なくとも 1 つを指定する必要があります。put_row、update_row、およびdelete_rowなどの操作は、現在return_typeパラメーターをサポートしています。このパラメーターでサポートされている値はRT_PKのみであり、これは戻り値にその行のプライマリキー(PK)が含まれることを指定します。put_row、update_row、delete_rowなどの操作において、戻り値にreturn_rowフィールドが含まれるようになりました。return_typeパラメーターをリクエストでRT_PKに設定した場合、return_rowフィールドには行のPK値が含まれます。
よくある質問
「Signature mismatch」エラーが発生した場合の対処方法を教えてください。
以下の例外が発生します:
Error Code: OTSAuthFailed, Message: Signature mismatch., RequestId: 0005f55a-xxxx-xxxx-xxxx-xxxxxxxxxxxx, TraceId: 10b0f0e0-xxxx-xxxx-xxxx-xxxxxxxxxxxx, HttpStatus: 403
-
原因:クライアントの初期化時に指定した AccessKey ID または AccessKey Secret が正しくありません。
-
解決方法:正しい AccessKey(AccessKey ID および AccessKey Secret を含む)を指定してください。
「Request denied by instance ACL policies」エラーが発生した場合の対処方法を教えてください。
SDK を使用して Tablestore インスタンス内のリソースにアクセスしようとした際に、以下の Request denied by instance ACL policies 例外が発生します。エラー例を以下に示します:
[ErrorCode]:OTSAuthFailed, [Message]:Request denied by instance ACL policies., [RequestId]:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, [TraceId]:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, [HttpStatus:]403
-
原因:クライアントが使用しているネットワークタイプが、インスタンスのネットワークアクセス要件を満たしていません。たとえば、クライアントがインターネットを使用しているにもかかわらず、インスタンスがインターネット経由でのアクセスを許可するように構成されていない場合などです。
-
解決方法:新規インスタンスでは、デフォルトでパブリックネットワークアクセスが無効になっています。インターネット経由でインスタンス内のリソースにアクセスするには、以下の手順でパブリックネットワークアクセスを有効化します:
-
Tablestore コンソール に移動し、インスタンスのエイリアスをクリックします。
-
ネットワーク管理 をクリックします。許可されるネットワークタイプ で インターネット を選択し、設定項目 をクリックします。
-
「Request denied because this instance can only be accessed from the binded VPC」エラーが発生した場合の対処方法を教えてください。
SDK を使用して Tablestore インスタンス内のリソースにアクセスしようとした際に、以下の Request denied because this instance can only be accessed from the bound VPC 例外が発生します。エラー例を以下に示します:
[ErrorCode]:OTSAuthFailed, [Message]:Request denied because this instance can only be accessed from the binded VPC., [RequestId]:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, [TraceId]:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, [HttpStatus:]403
-
原因:Tablestore インスタンスのアクセスタイプが VPC のみにバインド または Tablestore コンソールまたは VPC のみにバインド に設定されている場合、インスタンスに VPC をアタッチする必要があります。また、クライアントがインスタンスと同じ VPC 内にあり、VPC エンドポイントを使用して Tablestore にアクセスしていることを確認する必要があります。
-
解決方法:インスタンスのアクセスタイプを変更してインターネットアクセスを許可するか、Tablestore インスタンスに VPC をアタッチし、クライアントがその VPC ネットワーク内にあることを確認します。VPC をアタッチするには、以下の手順を実行します:
-
Tablestore コンソール に移動し、インスタンスのエイリアスをクリックします。
-
をクリックします。VPC ID および VSwitch を選択し、VPC 名 を入力して、OK をクリックします。
-
HTTPS 経由で Tablestore リソースにアクセスするにはどうすればよいですか。
最新バージョンの Python SDK を使用してください。OpenSSL のバージョンが 0.9.8j 以降であることを確認してください。OpenSSL 1.0.2d を推奨します。
protobuf のバージョンが互換性がない場合の対処方法を教えてください。
一部の protobuf バージョンは、現在のインストールパッケージに含まれる *pb2.py ファイルと互換性がありません。この問題を解決するには、*pb2.py ファイルを手動で再生成します:
現在のバージョンの protoc を使用して、対応する proto ファイルから順次コードを生成します。
protoc --python_out=. tablestore/protobuf/search.proto protoc --python_out=. tablestore/protobuf/table_store.proto protoc --python_out=. tablestore/protobuf/table_store_filter.proto生成された 3 つのファイルの拡張子を
pb2.pyに変更し、インストールディレクトリのtablestore/protobuf/フォルダにコピーして、元の*pb2.pyファイルを置き換えます。
Credentials ツールを使用してアクセス認証情報を読み込む
以下のコマンドを実行して、alibabacloud_credentials パッケージをインストールします。
pip3 install alibabacloud_credentials環境変数を構成します。
ALIBABA_CLOUD_ACCESS_KEY_IDおよびALIBABA_CLOUD_ACCESS_KEY_SECRET環境変数を、Alibaba Cloud アカウントの AccessKey ID および AccessKey Secret に設定します。アクセス認証情報を読み込みます。
以下のコードでは、Credentials ツールを使用して環境変数からアクセス認証情報を読み込みます。
# -*- coding: utf-8 -*- from alibabacloud_credentials.client import Client as CredClient # CredClient を使用して、環境変数から AccessKey ID および AccessKey Secret を取得します。 cred = CredClient() access_key_id = cred.get_credential().access_key_id access_key_secret = cred.get_credential().access_key_secret