Geração automática de um modelo do PynamoDB e funções de CRUD para o Amazon DynamoDB por meio de uma aplicação do Python - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Geração automática de um modelo do PynamoDB e funções de CRUD para o Amazon DynamoDB por meio de uma aplicação do Python

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

Resumo

É comum exigir entidades e funções para operações de criar, ler, atualizar e excluir (CRUD, na sigla em inglês) a fim de realizar operações no banco de dados do Amazon DynamoDB de maneira eficiente. O PynamoDB é uma interface baseada em Python que oferece suporte ao Python 3. Além disso, a interface oferece recursos como suporte a transações do Amazon DynamoDB, serialização e desserialização automáticas de valores de atributos e compatibilidade com estruturas populares do Python, como Flask e Django. Esse padrão auxilia desenvolvedores que usam o Python e o DynamoDB, oferecendo uma biblioteca que facilita a criação automática de modelos PynamoDB e de funções para operações de CRUD. Enquanto gera as funções de CRUD essenciais para tabelas de banco de dados, o padrão também pode reverter a engenharia de modelos do PynamoDB e de funções de CRUD usando tabelas do Amazon DynamoDB. Este padrão foi projetado para simplificar operações de banco de dados usando uma aplicação baseada em Python.

Os principais recursos desta solução são os seguintes:

  • Esquema JSON para um modelo do PynamoDB: gere automaticamente modelos do PynamoDB em Python importando um arquivo de esquema JSON.

  • Geração de funções de CRUD: gere automaticamente funções para realizar operações de CRUD em tabelas do DynamoDB.

  • Engenharia reversa usando o DynamoDB: use o mapeamento objeto-relacional (ORM, na sigla em inglês) do PynamoDB para reverter engenharia de modelos do PynamoDB e de funções de CRUD para tabelas existentes do Amazon DynamoDB.

Pré-requisitos e limitações

Pré-requisitos

  • Um ativo Conta da AWS

  • Python versão 3.8 ou versões posteriores, baixado e instalado

  • Jinja2 na versão 3.1.2 ou em versões posteriores, baixado e instalado

  • Tabelas do Amazon DynamoDB para as quais você deseja gerar o ORM

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

  • PynamoDB na versão 5.4.1 ou versões posteriores, instalado

Arquitetura

Pilha de tecnologias de destino

  • Script JSON

  • Aplicação do Python

  • Modelo do PynamoDB

  • Instância de banco de dados do Amazon DynamoDB

Arquitetura de destino

Uso de uma aplicação do Python para gerar funções de CRUD e o modelo do PynamoDB usando as tabelas do DynamoDB.
  1. Você cria um arquivo de esquema JSON de entrada. Esse arquivo de esquema JSON representa os atributos das respectivas tabelas do DynamoDB das quais você deseja gerar modelos do PynamoDB e funções de CRUD. O arquivo contém as seguintes três chaves principais:

  2. Execute a aplicação do Python e forneça o arquivo de esquema JSON como entrada.

  3. A aplicação do Python lê o arquivo de esquema JSON.

  4. A aplicação do Python se conecta às tabelas do DynamoDB para derivar o esquema e os tipos de dados. A aplicação executa a operação describe_table e busca os atributos de chave e de índice para a tabela.

  5. A aplicação do Python combina os atributos do arquivo de esquema JSON com os da tabela do DynamoDB. Ele usa o mecanismo de modelos Jinja para gerar um modelo do PynamoDB e as funções de CRUD correspondentes.

  6. Você acessa o modelo do PynamoDB para realizar operações de CRUD na tabela do DynamoDB.

Ferramentas

Serviços da AWS

  • O Amazon DynamoDB é um serviço de banco de dados NoSQL totalmente gerenciado que fornece performance rápida, previsível e escalável.

Outras ferramentas

  • O Jinja é um mecanismo de geração de modelos extensível que compila modelos em código Python otimizado. Este padrão usa o mecanismo Jinja para gerar conteúdo dinâmico com a incorporação de espaços reservados e de lógica nos modelos.

  • O PynamoDB é uma interface baseada em Python para o Amazon DynamoDB.

  • Python é uma linguagem de programação de computador de uso geral.

Repositório de código

O código desse padrão está disponível no repositório de modelos PyNamoDB de GitHub geração automática e funções CRUD. O repositório é dividido em duas partes principais: o pacote de controle e os modelos.

Pacote de controle

O pacote Python de controle contém a lógica principal da aplicação, que ajuda a gerar o modelo do PynamoDB e as funções de CRUD. Ele contém o seguinte:

  • input_json_validator.py: este script em Python valida o arquivo de esquema JSON de entrada e cria os objetos Python que contêm a lista das tabelas de destino do DynamoDB e os atributos requeridos para cada uma.

  • dynamo_connection.py: este script estabelece uma conexão com a tabela do DynamoDB e emprega a operação describe_table para extrair os atributos necessários para criar o modelo do PynamoDB.

  • generate_model.py: este script contém a classe GenerateModel do Python, que cria o modelo do PynamoDB com base no arquivo de esquema JSON de entrada e na operação describe_table.

  • generate_crud.py: para as tabelas do DynamoDB especificadas no arquivo de esquema JSON, este script usa a operação GenerateCrud para criar as classes do Python correspondentes.

Modelos

Este diretório do Python contém os seguintes modelos do Jinja:

  • model.jinja: este modelo do Jinja contém a expressão de modelo para gerar o script do modelo do PynamoDB.

  • crud.jinja: este modelo do Jinja contém a expressão de modelo para gerar o script das funções de CRUD.

Épicos

TarefaDescriptionHabilidades necessárias

Clonar o repositório.

Digite o comando apresentado a seguir para clonar o repositório Auto-generate PynamoDB models and CRUD functions.

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

Configure o ambiente do Python.

  1. Acesse o diretório principal do repositório clonado.

    cd amazon-reverse-engineer-dynamodb
  2. Digite o comando apresentado a seguir para instalar as bibliotecas e os pacotes necessários.

    pip install -r requirements.txt
Desenvolvedor de aplicativos
TarefaDescriptionHabilidades necessárias

Modifique o arquivo de esquema JSON.

  1. Acesse o diretório principal do repositório clonado.

    cd amazon-reverse-engineer-dynamodb
  2. Abra o arquivo test.json no editor de sua preferência. Você pode usar este arquivo como referência para criar seu próprio arquivo de esquema JSON ou atualizar os valores deste arquivo para corresponder ao seu ambiente.

  3. Modifique o nome Região da AWS, os valores e os atributos das tabelas de destino do DynamoDB.

    nota

    Caso você defina uma tabela que não exista no arquivo de esquema JSON, esta solução não gerará modelos nem funções de CRUD para essa tabela.

  4. Salve e feche o arquivo test.json. Recomendamos que você salve este arquivo com um novo nome.

Desenvolvedor de aplicativos

Execute a aplicação do Python.

Digite o comando apresentado a seguir para gerar os modelos do PynamoDB e as funções de CRUD, substituindo <input_schema.json> pelo nome do seu arquivo de esquema JSON.

python main.py --file <input_schema.json>
Desenvolvedor de aplicativos
TarefaDescriptionHabilidades necessárias

Verifique o modelo do PynamoDB gerado.

  1. No diretório principal do repositório clonado, digite o comando apresentado a seguir para acessar o repositório models.

    cd models
  2. Por padrão, esta solução nomeia o arquivo do modelo do PynamoDB como demo_model.py. Valide se este arquivo está presente.

Desenvolvedor de aplicativos

Verifique as funções de CRUD geradas.

  1. No diretório principal do repositório clonado, digite o comando apresentado a seguir para acessar o repositório crud.

    cd crud
  2. Por padrão, esta solução nomeia o script como demo_crud.py. Valide se este arquivo está presente.

  3. Use as classes do Python no arquivo demo_crud.py para realizar uma operação de CRUD na tabela de destino do DynamoDB. Confirme se a operação foi concluída com êxito.

Desenvolvedor de aplicativos

Recursos relacionados

Mais informações

Atributos de amostra para o arquivo do esquema JSON

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