El SDK de Tablestore para Python admite operaciones con los modelos de tabla ancha y de series de tiempo.
Primeros pasos
Para comenzar, prepare su entorno, instale el SDK e inicialice un cliente.
Requisitos previos
Descargue e instale el entorno de ejecución de Python. Ejecute el comando python3 --version para comprobar su versión de Python.
A partir de la versión 6.0.0, el SDK de Python solo es compatible con Python 3 y ya no admite Python 2. Si necesita usar Python 2, debe utilizar la versión 5.4.4 o una anterior.
Instalar el SDK
Seleccione un método de instalación. Utilice la versión más reciente del SDK para asegurar que los ejemplos de código se ejecuten correctamente.
Instalar mediante pip (recomendado)
Ejecute a continuación el comando para instalar el SDK.
pip3 install tablestore
Instalar desde GitHub
Clone el SDK desde GitHub con git e instálelo.
-
Clone el repositorio.
git clone https://github.com/aliyun/aliyun-tablestore-python-sdk.git -
Vaya al directorio del SDK.
cd aliyun-tablestore-python-sdk -
Instale el SDK.
python3 setup.py install
Instalar desde el código fuente
Descargue e instale el SDK a partir del código fuente.
Descargue y descomprima Python SDK.
Vaya al directorio del SDK descomprimido.
-
Instale el SDK.
python3 setup.py install
Configurar las credenciales de acceso
Obtenga Create an AccessKey para su cuenta de Alibaba Cloud o usuario de RAM. Después, configúrelas como variable de entorno para evitar codificarlas directamente en el código.
Reinicie su IDE, terminal, otras aplicaciones de escritorio y servicios en segundo plano después de configurar las variables. Así se cargarán las variables de entorno actualizadas. Para obtener más información sobre otros tipos de credenciales de acceso, consulte Configure access credentials .
Linux
-
Agregue las variables de entorno al final de
~/.bashrc:echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc -
Aplique los cambios:
source ~/.bashrc -
Compruebe las variables de entorno:
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET
macOS
-
Compruebe cuál es su shell predeterminado:
echo $SHELL -
Configure las variables según el tipo de shell:
Zsh
-
Agregue las variables de entorno al final de
~/.zshrc:echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc -
Aplique los cambios:
source ~/.zshrc -
Compruebe las variables de entorno:
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET
Bash
-
Agregue las variables de entorno al final de
~/.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 -
Aplique los cambios:
source ~/.bash_profile -
Compruebe las variables de entorno:
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET
-
Windows
CMD
-
Establezca las variables de entorno en CMD:
setx TABLESTORE_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx TABLESTORE_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET" -
Reinicie CMD y compruebe los valores:
echo %TABLESTORE_ACCESS_KEY_ID% echo %TABLESTORE_ACCESS_KEY_SECRET%
PowerShell
-
Ejecute lo siguiente en 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) -
Compruebe las variables de entorno:
[Environment]::GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
Inicializar el cliente
El código a continuación inicializa un cliente. También enumera todas las tablas de datos y de series de tiempo de una instancia para comprobar la conectividad.
El acceso por red pública está deshabilitado de forma predeterminada en las instancias nuevas. Para habilitarlo, vaya a Network Management de la instancia.
#!/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()
Compatibilidad de versiones
La versión actual es 6.x.x. Su compatibilidad con versiones anteriores es la siguiente:
-
Compatible con 5.x.x.
Las versiones 5.4.x, 5.3.x y 5.2.x son compatibles. Sin embargo, 5.2.1 y 5.1.0 presentan incompatibilidades en estos casos:
-
El tipo de valor devuelto por el método
Search.En la versión 5.1.0 y anteriores, este método devuelve un objeto
Tuplede forma predeterminada. A partir de la 5.2.0, devuelve un objetoSearchResponse. La claseSearchResponseimplementa__iter__y permite recorrer sus elementos. Para obtener un objetoTuple, utiliceSearchResponse.v1_response(). -
El nuevo método
ParallelScan.De forma predeterminada, este método devuelve un objeto
ParallelScanResponse. Si necesita obtener un objetoTuple, utiliceParallelScanResponse.v1_response().
-
Compatible con 4.x.x.
-
Incompatible con 2.x.x. La serie 2.x.x admite claves primarias desordenadas, mientras que la 4.0.0 y posteriores no. Cambios disruptivos:
El nombre del paquete cambió de
ots2atablestore.Se agregó el parámetro
TableOptionsaClient.create_table.En los métodos
put_row,get_rowyupdate_row, el tipo deprimary_keycambió dedictalistpara conservar el orden de la clave primaria.En
put_rowyupdate_row, el tipo deattribute_columnscambió dedictalist.Se añadió
timestampaattribute_columnsenput_rowyupdate_row.Los métodos
get_rowyget_rangeahora requieren como mínimo uno de estos parámetros:max_version and time_range.Los métodos
put_row,update_rowydelete_rowahora admitenreturn_type. El único valor compatible esRT_PK, que devuelve la clave primaria (PK) de la fila.Las respuestas de
put_row,update_rowydelete_rowahora incluyenreturn_row. Cuandoreturn_typese establece enRT_PK,return_rowcontiene el valor dePK.
Preguntas frecuentes
¿Qué hago si ocurre el error "Signature mismatch"?
Se presenta la siguiente excepción:
Error Code: OTSAuthFailed, Message: Signature mismatch., RequestId: 0005f55a-xxxx-xxxx-xxxx-xxxxxxxxxxxx, TraceId: 10b0f0e0-xxxx-xxxx-xxxx-xxxxxxxxxxxx, HttpStatus: 403
Causa: el AccessKey ID o el AccessKey secret es incorrecto.
Solución: proporcione el AccessKey ID y el AccessKey secret correctos.
¿Qué hago si ocurre el error "Request denied by instance ACL policies"?
El SDK puede devolver el error 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
Causa: el tipo de red del cliente no coincide con la política de acceso de la instancia. Por ejemplo, la instancia no permite el acceso por Internet.
-
Solución: el acceso por red pública está deshabilitado de forma predeterminada. Para habilitarlo, siga estos pasos:
En la consola de Tablestore, haga clic en la instancia de destino.
Haga clic en Network Management. En Allowed Network Type, seleccione Internet y luego haga clic en Settings.
¿Qué hago si ocurre el error "Request denied because this instance can only be accessed from the binded VPC"?
El SDK puede devolver el error 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
Causa: el tipo de acceso de la instancia está configurado como Bound VPCs Only o Tablestore Console or Bound VPCs. Sin embargo, el cliente no se encuentra en una VPC asociada ni accede a Tablestore mediante un endpoint de VPC.
-
Solución: permita el acceso por Internet, o bien asocie una VPC y conecte el cliente desde ella:
En la consola de Tablestore, haga clic en la instancia de destino.
Vaya a . Seleccione un VPC ID y un VSwitch, introduzca un VPC Name y haga clic en OK.
¿Cómo accedo a los recursos de Tablestore mediante HTTPS?**
Utilice la versión más reciente del SDK de Python. Asegúrese de que su versión de OpenSSL sea 0.9.8j o posterior; se recomienda OpenSSL 1.0.2d.
¿Qué hago si las versiones de protobuf son incompatibles?
Algunas versiones de protobuf son incompatibles con los archivos *pb2.py del paquete de instalación. Para resolverlo, regenere los archivos *pb2.py:
-
Use su versión actual de protoc para generar el código de los archivos 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 Cambie el nombre de los archivos generados para que tengan la extensión
pb2.py. Luego cópielos atablestore/protobuf/dentro del directorio de instalación y reemplace los archivos*pb2.pyoriginales.
Usar la herramienta Credentials para leer las credenciales de acceso
-
Ejecute el siguiente comando para instalar el paquete alibabacloud_credentials.
pip3 install alibabacloud_credentials -
Configure las variables de entorno.
Establezca
ALIBABA_CLOUD_ACCESS_KEY_IDyALIBABA_CLOUD_ACCESS_KEY_SECRETcon el AccessKey ID y el AccessKey secret de su cuenta de Alibaba Cloud. -
Lea las credenciales de acceso.
El código a continuación lee las credenciales de acceso desde las variables de entorno mediante la herramienta Credentials.
# -*- 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