The Tablestore SDK for Python supports wide table and time series model operations.
Get started
Prepare your environment, install the SDK, and initialize a client to get started.
Prerequisites
Download and install the Python runtime environment. Run the python3 --version command to check your Python version.
Starting from version 6.0.0, the Python SDK supports only Python 3 and no longer supports Python 2. To use Python 2, you must use version 5.4.4 or earlier.
Install the SDK
Select an installation method. Use the latest SDK version to ensure code examples run correctly.
Install by using pip (recommended)
Run the following command to install the SDK.
pip3 install tablestore
Install from GitHub
Clone the SDK from GitHub using git and install it.
-
Clone the repository.
git clone https://github.com/aliyun/aliyun-tablestore-python-sdk.git -
Navigate to the SDK directory.
cd aliyun-tablestore-python-sdk -
Install the SDK.
python3 setup.py install
Install from source code
Download and install the SDK from source.
-
Download and decompress the Python SDK.
-
Navigate to the decompressed SDK directory.
-
Install the SDK.
python3 setup.py install
Configure access credentials
Create an AccessKey for your Alibaba Cloud account or a RAM user. Then, configure the AccessKey in the environment variables as shown below. Configuring the AccessKey in environment variables improves security because it prevents you from hard-coding sensitive information in your code.
After the configuration is complete, you must restart or refresh your development environment. This includes your IDE, command-line interface, other desktop applications, and background services. This ensures that the latest system environment variables are loaded. For more information about other types of access credentials, see Configure access credentials.
Linux
-
Run the following commands to append the environment variable settings to the
~/.bashrcfile.echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc -
Run the following command to apply the changes.
source ~/.bashrc -
Run the following commands to verify that the environment variables are effective.
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET
macOS
-
Run the following command in the terminal to view your default shell type.
echo $SHELL -
Perform the following operations based on your default shell type.
Zsh
-
Run the following commands to append the environment variable settings to the
~/.zshrcfile.echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc -
Run the following command to apply the changes.
source ~/.zshrc -
Run the following commands to verify that the environment variables are effective.
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET
Bash
-
Run the following commands to append the environment variable settings to the
~/.bash_profilefile.echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile -
Run the following command to apply the changes.
source ~/.bash_profile -
Run the following commands to verify that the environment variables are effective.
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET
-
Windows
CMD
-
Run the following commands in Command Prompt (CMD) to set the environment variables.
setx TABLESTORE_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx TABLESTORE_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET" -
Restart CMD and run the following commands to verify that the environment variables are effective.
echo %TABLESTORE_ACCESS_KEY_ID% echo %TABLESTORE_ACCESS_KEY_SECRET%
PowerShell
-
Run the following commands in 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) -
Run the following commands to verify that the environment variables are effective.
[Environment]::GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
Initialize the client
The following code initializes a client and lists all data tables and time series tables in an instance to verify connectivity.
Public network access is disabled by default for new instances. To enable it, go to Network Management for the instance.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import sys
from tablestore import OTSClient
def main():
try:
# Get access credentials from environment variables. Ensure TABLESTORE_ACCESS_KEY_ID and TABLESTORE_ACCESS_KEY_SECRET are set.
access_key_id = os.getenv("TABLESTORE_ACCESS_KEY_ID")
access_key_secret = os.getenv("TABLESTORE_ACCESS_KEY_SECRET")
# TODO: Replace the following values with your instance details.
instance_name = "n01k********" # Instance name
endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com" # Instance endpoint
# Create a client instance.
client = OTSClient(endpoint, access_key_id, access_key_secret, instance_name)
# List the data tables.
resp = client.list_table()
print(f"Found {len(resp)} data tables in instance '{instance_name}':")
for table_name in resp:
print(f"{table_name}")
# List the time series tables.
resp = client.list_timeseries_table()
print(f"\nFound {len(resp)} time series tables in instance '{instance_name}':")
for tableMeta in resp:
print(f"{tableMeta.timeseries_table_name}")
except Exception as e:
print(f"Operation failed: {str(e)}")
sys.exit(1)
if __name__ == "__main__":
main()
Version compatibility
The current version is 6.x.x. Compatibility with earlier versions:
-
Compatible with 5.x.x.
5.4.x, 5.3.x, and 5.2.x are compatible. 5.2.1 and 5.1.0 are incompatible in these cases:
-
The return type of the
Searchmethod.In 5.1.0 and earlier, this method returns a
Tupleby default. From 5.2.0 onward, it returns aSearchResponseobject.SearchResponseimplements__iter__and supports traversal. To get aTuple, useSearchResponse.v1_response(). -
The new
ParallelScanmethod.By default, this method returns a
ParallelScanResponseobject. To get aTuple, useParallelScanResponse.v1_response().
-
-
Compatible with 4.x.x.
-
Incompatible with 2.x.x. The 2.x.x series supports out-of-order primary keys, while 4.0.0 and later do not. Breaking changes:
-
Package name changed from
ots2totablestore. -
TableOptionsparameter added toClient.create_table. -
For
put_row,get_row, andupdate_row, theprimary_keytype changed fromdicttolistto preserve primary key order. -
For
put_rowandupdate_row, theattribute_columnstype changed fromdicttolist. -
timestampadded toattribute_columnsforput_rowandupdate_row. -
get_rowandget_rangenow require at least one ofmax_version and time_range. -
put_row,update_row, anddelete_rownow supportreturn_type. The only supported value isRT_PK, which returns the primary key (PK) of the row. -
put_row,update_row, anddelete_rownow includereturn_rowin their response. Whenreturn_typeis set toRT_PK,return_rowcontains thePKvalue.
-
FAQ
What do I do if a "Signature mismatch" error occurs?
The following exception occurs:
Error Code: OTSAuthFailed, Message: Signature mismatch., RequestId: 0005f55a-xxxx-xxxx-xxxx-xxxxxxxxxxxx, TraceId: 10b0f0e0-xxxx-xxxx-xxxx-xxxxxxxxxxxx, HttpStatus: 403
-
Cause: The AccessKey ID or AccessKey secret specified during client initialization is incorrect.
-
Solution: Provide the correct AccessKey, which includes the AccessKey ID and AccessKey secret.
What do I do if a "Request denied by instance ACL policies" error occurs?
The following Request denied by instance ACL policies exception occurs when you use the SDK to access resources in a Tablestore instance. An example error is shown below:
[ErrorCode]:OTSAuthFailed, [Message]:Request denied by instance ACL policies., [RequestId]:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, [TraceId]:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, [HttpStatus:]403
-
Cause: The network type used by the client does not meet the network access requirements of the instance. For example, the client uses the Internet, but the instance is not configured to allow access over the Internet.
-
Solution: By default, public network access is disabled for new instances. To access resources in an instance over the Internet, enable public network access as follows:
-
Go to the Tablestore console and click the instance alias.
-
Click Network Management. For Allowed Network Type, select Internet, and then click Settings.
-
What do I do if a "Request denied because this instance can only be accessed from the binded VPC" error occurs?
The following Request denied because this instance can only be accessed from the bound VPC exception occurs when you use the SDK to access resources in a Tablestore instance. An example error is shown below:
[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
-
Cause: If the access type of the Tablestore instance is set to Bound VPCs Only or Tablestore Console or Bound VPCs, you must attach a VPC to the instance. You must also ensure that the client is in the same VPC as the instance and accesses Tablestore using a VPC endpoint.
-
Solution: Change the instance access type to allow Internet access, or attach a VPC to the Tablestore instance and ensure that the client is within that VPC network. To attach a VPC:
-
Go to the Tablestore console and click the instance alias.
-
Click . Select a VPC ID and a VSwitch, enter a VPC Name, and then click OK.
-
How do I access Tablestore resources over HTTPS?
Use the latest version of the Python SDK. Ensure that your OpenSSL version is 0.9.8j or later. OpenSSL 1.0.2d is recommended.
What do I do if protobuf versions are incompatible?
Some protobuf versions are incompatible with the *pb2.py files in the installation package. To resolve this, regenerate the *pb2.py files:
-
Use your current protoc version to generate code for the proto files.
protoc --python_out=. tablestore/protobuf/search.proto protoc --python_out=. tablestore/protobuf/table_store.proto protoc --python_out=. tablestore/protobuf/table_store_filter.proto -
Rename the generated files with the
pb2.pyextension and copy them totablestore/protobuf/in the installation directory, replacing the original*pb2.pyfiles.
Use the Credentials tool to read access credentials
-
Run the following command to install the alibabacloud_credentials package.
pip3 install alibabacloud_credentials -
Configure environment variables.
Set
ALIBABA_CLOUD_ACCESS_KEY_IDandALIBABA_CLOUD_ACCESS_KEY_SECRETto the AccessKey ID and AccessKey secret of your Alibaba Cloud account. -
Read the access credentials.
The following code reads access credentials from environment variables using the Credentials tool.
# -*- coding: utf-8 -*- from alibabacloud_credentials.client import Client as CredClient # Use CredClient to get the AccessKey ID and AccessKey secret from the environment variables. cred = CredClient() access_key_id = cred.get_credential().access_key_id access_key_secret = cred.get_credential().access_key_secret