Consulta DynamoDB Python

Abid Ullah 15 febrero 2024
  1. Introducción a DynamoDB
  2. Introducción a Boto3
  3. Crear tabla en DynamoDB usando Boto3
  4. Eliminar tablas en DynamoDB a través de Boto3
  5. Listar tablas en DynamoDB a través de Boto3
  6. Paginación en DynamoDB a través de Boto3
  7. Clasificación en DynamoDB a través de Boto3
  8. Obtener elementos en DynamoDB a través de Boto3
  9. Escanear elementos en DynamoDB a través de Boto3
  10. Índice secundario global en DynamoDB
  11. Copia de seguridad de una tabla de DynamoDB con Boto3
  12. Conclusión
Consulta DynamoDB Python

Este artículo discutirá cómo podemos consultar Amazon DynamoDB usando python. También discutiremos de qué se trata Boto3 y por qué necesita consultar DynamoDB.

Introducción a DynamoDB

DynamoDB es un servicio de base de datos NoSQL que proporciona mecanismos de seguridad integrados, copias de seguridad continuas, almacenamiento en caché de memoria y útiles herramientas de importación/exportación de datos.

DynamoDB replica automáticamente los datos en diferentes zonas de disponibilidad (AZ) en una región de AWS, lo que mejora la seguridad contra interrupciones y pérdida de datos. Numerosas funciones de seguridad están disponibles con DynamoDB, incluido el control de acceso detallado, el cifrado en reposo y el registro de la actividad del usuario.

Introducción a Boto3

Boto3 es una biblioteca de python integrada desarrollada para Amazon Web Services (AWS). Esta biblioteca es útil para interactuar, crear, configurar, administrar y usar diferentes servicios de Amazon, incluido DynamoDB.

Instalar e Importar Boto3

Para instalar la biblioteca Boto3 en nuestro banco de trabajo de Python, use el siguiente comando.

pip install boto3

Producción:

Instalar Boto3

Código:

import boto3

Esto importará la biblioteca boto3 a nuestro cuaderno.

Conexión de Boto3 a DynamoDB

Usaremos el siguiente código para conectarnos a nuestro DynamoDB usando Boto3.

Código:

import boto3

client = boto3.client(
    "dynamodb",
    aws_access_key_id="yyyy",
    aws_secret_access_key="xxxx",
    region_name="us-east-1",
)

Tenga en cuenta que la base de datos ya debe estar creada en AWS DynamoDB para conectarse a ella a través de la biblioteca de Python Boto3.

Crear tabla en DynamoDB usando Boto3

Las tablas en DynamoDB se pueden crear de varias maneras. Esto incluye hacer uso de la CLI de Amazon, la consola de AWS o el uso de Boto3.

Aquí usaremos Boto3 con la base de datos a la que ya estamos conectados siguiendo los pasos mencionados anteriormente. Saber cómo varían el recurso de tabla y el cliente de DynamoDB puede permitirle usar cualquiera de ellos según sus necesidades, ya que este recurso de tabla puede simplificar significativamente algunas operaciones.

Los desarrolladores pueden crear, actualizar y eliminar tablas de DynamoDB y todo su contenido mediante el recurso boto3.resource('dynamodb'). Este recurso admite seguridad a nivel de elemento mediante expresiones condicionales y seguridad a nivel de tabla.

Para el acceso sin servidor a los datos de DynamoDB, utilice el recurso boto3.resource('dynamodb') junto con las funciones de AWS Lambda.

import boto3

dynamodb = boto3.resource("dynamodb", region_name="us-west-2")

table = dynamodb.create_table(
    TableName="Movies",
    KeySchema=[
        {"AttributeName": "year", "KeyType": "HASH"},  # Partition key
        {"AttributeName": "title", "KeyType": "RANGE"},  # Sort key
    ],
    AttributeDefinitions=[
        {"AttributeName": "id", "AttributeType": "N"},
        {"AttributeName": "createdAt", "AttributeType": "S"},
    ],
    ProvisionedThroughput={"ReadCapacityUnits": 10, "WriteCapacityUnits": 10},
)
print("Table status:", table.table_status)

La creación de tablas a través de Boto3 tarda un tiempo antes de que se active y se muestre. Se recomienda una pequeña espera antes de volver a intentarlo, o podemos usar una función de camarero para que nos avise cuando la mesa está activa.

import botocore.session

session = botocore.session.get_session()
dynamodb = session.create_client(
    "dynamodb", region_name="us-east-1"
)  # low-level client

waiter = dynamodb.get_waiter("table_exists")
waiter.wait(TableName="my-table-name")

Eliminar tablas en DynamoDB a través de Boto3

Eliminar tablas en DynamoDB es bastante simple. Necesitamos escribir el siguiente fragmento de código si cambiamos de opinión y queremos eliminar una tabla de nuestra base de datos.

import boto3

dynamodb = boto3.resource("dynamodb", region_name="us-east-1")

dynamodb.delete_table(TableName="Movies")

Tenga en cuenta que la tabla que estamos tratando de eliminar ya existe en la base de datos con el mismo nombre o nos dará un mensaje de error (Tabla no encontrada).

Listar tablas en DynamoDB a través de Boto3

Si estamos interesados en encontrar la lista de todas las mesas disponibles en nuestra región, necesitamos usar la función list() para listar todas las mesas disponibles en la región.

import boto3

dynamodb = boto3.resource("dynamodb", region_name=region)

tables = list(dynamodb.tables.all())
print(tables)

Hay que asegurarse de que el número total de tablas sea inferior a 100, o tendremos que paginar la lista.

Paginación en DynamoDB a través de Boto3

Una sola llamada de lista devuelve resultados de hasta 1 MB de elementos. Para una cotización adicional, necesitamos emitir una segunda llamada. Se debe realizar otra llamada con ExclusiveStartKey para obtener más elementos de esta tabla si LastEvaluatedKey estaba presente en el objeto de respuesta.

dynamodb = boto3.resource("dynamodb", region_name=region)

table = dynamodb.Table("my-table")

response = table.query()
data = response["Items"]

# LastEvaluatedKey indicates that there are more results
while "LastEvaluatedKey" in response:
    response = table.query(ExclusiveStartKey=response["LastEvaluatedKey"])
    data.update(response["Items"])

Clasificación en DynamoDB a través de Boto3

En el lado de la base de datos, DynamoDB solo proporciona un método para ordenar los resultados. Su capacidad para ordenar elementos está restringida a hacerlo en el código de la aplicación después de recibir los resultados si su tabla carece de uno.

Sin embargo, puede usar la siguiente sintaxis para ordenar los resultados de DynamoDB usando la clave de ordenación, ya sea de forma descendente o ascendente.

import boto3

dynamodb = boto3.resource("dynamodb", region_name=region)

table = dynamodb.Table("my-table")

# true = ascending, false = descending
response = table.query(ScanIndexForward=False)
data = response["Items"]

Obtener elementos en DynamoDB a través de Boto3

La función GetItem() se utiliza si estamos interesados en obtener un elemento específico de nuestra base de datos de DynamoDB.

import boto3

dynamodb = boto3.resource("dynamodb", region_name=region)

table = dynamodb.Table("my-table")

response = table.get_item(Key={primaryKeyName: "ID-1", sortKeyName: "SORT_2"})

Escanear elementos en DynamoDB a través de Boto3

Se puede acceder a toda la información de las tablas a través del escaneo. Los datos serán devueltos por el método scan() después de leer cada elemento de la tabla.

La operación de escaneo de la tabla puede devolver menos y los resultados deseados cuando agrega otras opciones, como la Expresión de filtro.

from boto3.dynamodb.conditions import Key, Attr
import boto3

dynamodb = boto3.resource("dynamodb")

table = dynamodb.Table("Employees")

response = table.scan()
response["Items"]

print(response)

# or


dynamodb = boto3.resource("dynamodb")
table = dynamodb.Table("Employees")

response = table.scan(FilterExpression=Attr("Department").eq("IT"))

print("The query returned the following items:")
for item in response["Items"]:
    print(item)

Índice secundario global en DynamoDB

Puede consultar propiedades que no están incluidas en la clave principal de la tabla principal mediante un índice secundario global. Hacer esto puede evitar los retrasos y las ineficiencias provocadas por un procedimiento de exploración de tabla completa.

El índice secundario global también incluirá propiedades de la tabla principal, pero se estructurará con una clave principal diferente, lo que hará que las consultas sean más rápidas.

Copia de seguridad de una tabla de DynamoDB con Boto3

Para crear copias de seguridad bajo demanda para la tabla de DynamoDB con Boto3, utilice el método create_backup() y pase el nombre de la tabla de copia de seguridad de destino junto con el nombre de la tabla.

import boto3

client = boto3.client("dynamodb")

response = client.create_backup(TableName="Employees", BackupName="Employees-Backup-01")
print(response)

Conclusión

Este artículo explica cómo consultar tablas de DynamoDB, crear, enumerar y realizar otras actividades CRUD en Amazon DynamoDB mediante Python Boto3 y realizar otras tareas de mantenimiento.

Autor: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn