Generación automática de 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.

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

Vijit Vashishtha, Dheeraj Alimchandani y Dhananjay Karanjkar, Amazon Web Services

Resumen

Es habitual que se requieran entidades y funciones de operaciones de creación, lectura, actualización y eliminación (CRUD) para realizar operaciones de base de datos de Amazon DynamoDB. PynamoDB es una interfaz basada en Python que admite Python 3. También ofrece características 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 permite a los desarrolladores trabajar con Python y DynamoDB, ya que proporciona una biblioteca que facilita 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.

Estas son algunas de las características principales de la solución:

  • Esquema JSON a modelo PynamoDB: genere automáticamente modelos de PynamoDB en Python mediante la importación de 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 la asignación 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 

  • Un activo Cuenta de AWS

  • La versión 3.8 o posterior de Python descargada e instalada

  • La versión 3.1.2 o posterior de Jinja2 descargada e instalada

  • Tablas de Amazon DynamoDB para las que desea generar ORM

  • AWS Command Line Interface (AWS CLI), instalado y configurado

  • La versión 5.4.1 o posterior de PynamoDB instalada

Arquitectura

Pila de tecnología de destino

  • script de JSON

  • aplicación de Python

  • modelo de PynamoDB

  • instancia de base de datos de Amazon DynamoDB

Arquitectura de destino

Use una aplicación de Python para generar funciones CRUD y el modelo de PynamoDB a partir de tablas de DynamoDB.
  1. Debe crear 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 estas tres claves importantes:

  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 de Jinja para generar un modelo de PynamoDB y las funciones CRUD correspondientes.

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

Tools (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 en 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 está dividido en dos partes principales: el paquete de controladores y las plantillas.

Paquete de controladores

El paquete Python de controladores contiene la lógica de aplicación principal que ayuda a generar el modelo de 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 uno.

  • dynamo_connection.py: este script establece una conexión con la tabla de DynamoDB y utiliza la operación describe_table 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 de 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 la operación GenerateCrud 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 de Jinja contiene la expresión de plantilla para generar el script de funciones CRUD.

Epics

TareaDescripciónHabilidades requeridas

Clonar el repositorio.

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

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

Configure el entorno de Python.

  1. Vaya al directorio de nivel superior del repositorio clonado.

    cd amazon-reverse-engineer-dynamodb
  2. Para instalar las bibliotecas y los paquetes necesarios, introduzca el comando siguiente.

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

Modifique el archivo de esquema JSON.

  1. Vaya al directorio de nivel superior del repositorio clonado.

    cd amazon-reverse-engineer-dynamodb
  2. Abra el archivo test.json en el editor que desee. Puede usar este archivo como referencia para crear su propio archivo de esquema JSON o puede actualizar los valores del 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. Le recomendamos que guarde este archivo con un nuevo nombre.

Desarrollador de aplicaciones

Ejecute la aplicación Python.

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

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

Compruebe el modelo de PynamoDB generado.

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

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

Desarrollador de aplicaciones

Verifique las funciones CRUD generadas.

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

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

  3. Utilice las clases de Python del archivo demo_crud.py para realizar una operación CRUD en la tabla de DynamoDB de destino. Confirme que la operación se completó 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" } ] } ]