Genere automáticamente un modelo de PynamoDB y funciones CRUD para Amazon DynamoDB mediante una aplicación de Python - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Genere automáticamente un modelo de PynamoDB y funciones CRUD para Amazon DynamoDB mediante una aplicación de Python

Creado por Vijit Vashishtha (AWS), Dheeraj Alimchandani (AWS) y Dhananjay Karanjkar (AWS)

Repositorio de código: amazon-reverse-engineer-dynamodb

Entorno: PoC o piloto

Tecnologías: bases de datos DevelopmentAndTesting; DevOps

Carga de trabajo: código abierto

Servicios de AWS: Amazon DynamoDB

Resumen

Es habitual que se requieran entidades y funciones de operaciones de creación, lectura, actualización y eliminación (CRUD) para realizar de forma eficiente las operaciones de la base de datos de Amazon DynamoDB. PynamoDB es una interfaz basada en Python que admite Python 3. También ofrece funciones como la compatibilidad con las transacciones de Amazon DynamoDB, la serialización y deserialización automáticas de los valores de los atributos y la compatibilidad con los marcos de trabajo más comunes de Python, como Flask y Django. Este patrón ayuda a los desarrolladores a trabajar con Python y DynamoDB al proporcionar una biblioteca que agiliza la creación automática de modelos de PynamoDB y funciones de operación CRUD. Si bien genera funciones CRUD esenciales para las tablas de bases de datos, también puede aplicar ingeniería inversa a los modelos de PynamoDB y a las funciones CRUD de las tablas de Amazon DynamoDB. Este patrón está diseñado para simplificar las operaciones de la base de datos mediante una aplicación basada en Python.

Las características principales de esta solución son las siguientes:

  • Esquema JSON a modelo PynamoDB: genere automáticamente modelos PynamoDB en Python importando un archivo de esquema JSON.

  • Generación de funciones CRUD: genere automáticamente funciones para realizar operaciones CRUD en tablas de DynamoDB.

  • Ingeniería inversa desde DynamoDB: utilice el mapeo relacional de objetos (ORM) de PynamoDB para aplicar ingeniería inversa a los modelos de PynamoDB y a las funciones CRUD de las tablas de Amazon DynamoDB existentes.

Requisitos previos y limitaciones

Requisitos previos 

Arquitectura

Pila de tecnología de destino

  • Script JSON

  • Aplicación Python

  • Modelo PynamoDB

  • Instancia de base de datos Amazon DynamoDB

Arquitectura de destino

Uso de una aplicación de Python para generar funciones CRUD y el modelo PynamoDB a partir de tablas de DynamoDB.
  1. Se crea un archivo de esquema JSON de entrada. Este archivo de esquema JSON representa los atributos de las tablas de DynamoDB respectivas a partir de las que desea crear modelos de PyNamoDB y para las que desea crear funciones CRUD. Contiene las tres claves importantes siguientes:

    • name: el nombre de la tabla de DynamoDB de destino.

    • region— La región de AWS en la que se aloja la tabla

    • attributes— Los atributos que forman parte de la tabla de destino, como la clave de partición (también conocida como atributo hash), la clave de clasificación, los índices secundarios locales, los índices secundarios globales y cualquier atributo que no sea clave. Esta herramienta espera que el esquema de entrada solo proporcione los atributos no clave, ya que la aplicación los obtiene directamente de la tabla de destino. Para ver un ejemplo de cómo especificar los atributos en el archivo de esquema JSON, consulta la sección de información adicional de este patrón.

  2. Ejecute la aplicación Python y proporcione el archivo de esquema JSON como entrada.

  3. La aplicación Python lee el archivo de esquema JSON.

  4. La aplicación Python se conecta a las tablas de DynamoDB para derivar el esquema y los tipos de datos. La aplicación ejecuta la operación describe_table y obtiene los atributos clave y de índice de la tabla.

  5. La aplicación Python combina los atributos del archivo de esquema JSON y la tabla de DynamoDB. Utiliza el motor de plantillas Jinja para generar un modelo PynamoDB y las funciones CRUD correspondientes.

  6. Puede acceder al modelo de PynamoDB para realizar operaciones CRUD en la tabla de DynamoDB.

Herramientas

Servicios de AWS

  • Amazon DynamoDB es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.

Otras herramientas

  • Jinja es un motor de plantillas extensible que compila plantillas en código Python optimizado. Este patrón usa Jinja para generar contenido dinámico al incrustar marcadores de posición y lógica dentro de las plantillas.

  • PynamoDB es una interfaz basada en Python para Amazon DynamoDB.

  • Python es un lenguaje de programación informático de uso general.

Repositorio de código

El código de este patrón está disponible en el repositorio de funciones CRUD y modelos de PynamoDB de GitHub generación automática. El repositorio se divide en dos partes principales: el paquete de controladores y las plantillas.

Paquete de controladores

El paquete Python del controlador contiene la lógica de aplicación principal que ayuda a generar el modelo PynamoDB y las funciones CRUD. Contiene lo siguiente:

  • input_json_validator.py— Este script de Python valida el archivo de esquema JSON de entrada y crea los objetos Python que contienen la lista de tablas de DynamoDB de destino y los atributos necesarios para cada una de ellas.

  • dynamo_connection.py— Este script establece una conexión con la tabla de DynamoDB y utiliza describe_table la operación para extraer los atributos necesarios para crear el modelo de PynamoDB.

  • generate_model.py— Este script contiene una clase de Python GenerateModel que crea el modelo PynamoDB en función del archivo de esquema JSON de entrada y de la operación. describe_table

  • generate_crud.py— Para las tablas de DynamoDB que se definen en el archivo de esquema JSON, este script utiliza GenerateCrud la operación para crear las clases de Python.

Plantillas

Este directorio de Python contiene las siguientes plantillas de Jinja:

  • model.jinja— Esta plantilla de Jinja contiene la expresión de plantilla para generar el script de modelo de PynamoDB.

  • crud.jinja— Esta plantilla Jinja contiene la expresión de plantilla para generar el script de funciones CRUD.

Epics

TareaDescripciónHabilidades requeridas

Clonar el repositorio.

Introduzca el siguiente comando para clonar el repositorio de funciones CRUD y modelos de PynamoDB de generación automática.

git clone https://github.com/aws-samples/amazon-reverse-engineer-dynamodb.git
Desarrollador de aplicaciones

Configure el entorno Python.

  1. Navegue hasta el directorio de nivel superior del repositorio clonado.

    cd amazon-reverse-engineer-dynamodb
  2. Introduzca el siguiente comando para instalar las bibliotecas y los paquetes necesarios.

    pip install -r requirements.txt
Desarrollador de aplicaciones
TareaDescripciónHabilidades requeridas

Modifique el archivo de esquema JSON.

  1. Navegue hasta el directorio de nivel superior del repositorio clonado.

    cd amazon-reverse-engineer-dynamodb
  2. Abre el test.json archivo en el editor que prefieras. Puede usar este archivo como referencia para crear su propio archivo de esquema JSON o puede actualizar los valores de este archivo para que coincidan con su entorno.

  3. Modifique los valores de nombre y atributos de las tablas de DynamoDB de destino. Región de AWS

    Nota: Si define una tabla que no existe en el archivo de esquema JSON, esta solución no genera modelos ni funciones CRUD para esa tabla.

  4. Guarde y cierre el archivo test.json. Se recomienda guardar este archivo con un nombre nuevo.

Desarrollador de aplicaciones

Ejecute la aplicación Python.

Introduzca el siguiente comando para generar los modelos de PynamoDB y las funciones CRUD, <input_schema.json> donde aparece el nombre del archivo de esquema JSON.

python main.py --file <input_schema.json>
Desarrollador de aplicaciones
TareaDescripciónHabilidades requeridas

Compruebe el modelo PynamoDB generado.

  1. En el directorio de nivel superior del repositorio clonado, introduzca el siguiente comando para acceder al repositorio. models

    cd models
  2. De forma predeterminada, esta solución asigna un nombre al archivo de modelo de PynamoDB. demo_model.py Valide que este archivo esté presente.

Desarrollador de aplicaciones

Verifique las funciones CRUD generadas.

  1. En el directorio de nivel superior del repositorio clonado, introduce el siguiente comando para acceder al repositorio. crud

    cd crud
  2. De forma predeterminada, esta solución asigna un nombre al script. demo_crud.py Valide que este archivo esté presente.

  3. Utilice las clases de Python del demo_crud.py archivo para realizar una operación CRUD en la tabla de DynamoDB de destino. Confirme que la operación se ha completado correctamente.

Desarrollador de aplicaciones

Recursos relacionados

Información adicional

Ejemplos de atributos para el archivo de esquema JSON

[ { "name": "test_table", "region": "ap-south-1", "attributes": [ { "name": "id", "type": "UnicodeAttribute" }, { "name": "name", "type": "UnicodeAttribute" }, { "name": "age", "type": "NumberAttribute" } ] } ]