

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Genera automaticamente un modello PynamoDB e funzioni CRUD per Amazon DynamoDB utilizzando un'applicazione Python
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application"></a>

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

## Riepilogo
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-summary"></a>

È comune richiedere entità e funzioni operative di creazione, lettura, aggiornamento ed eliminazione (CRUD) per eseguire in modo efficiente le operazioni del database Amazon DynamoDB. PynamoDB è un'interfaccia basata su Python che supporta Python 3. Fornisce inoltre funzionalità come il supporto per le transazioni Amazon DynamoDB, la serializzazione e la deserializzazione automatiche dei valori degli attributi e la compatibilità con i framework Python più comuni, come Flask e Django. Questo modello aiuta gli sviluppatori a lavorare con Python e DynamoDB fornendo una libreria che semplifica la creazione automatica di modelli PynamoDB e funzioni operative CRUD. Oltre a generare funzioni CRUD essenziali per le tabelle del database, può anche decodificare i modelli PynamoDB e le funzioni CRUD dalle tabelle Amazon DynamoDB. Questo modello è progettato per semplificare le operazioni del database utilizzando un'applicazione basata su Python.

Le caratteristiche principali di questa soluzione sono le seguenti:
+ **Da schema JSON a modello PynamoDB: genera automaticamente modelli PynamoDB** in Python importando un file di schema JSON.
+ **Generazione di funzioni CRUD**: genera automaticamente funzioni per eseguire operazioni CRUD sulle tabelle DynamoDB.
+ **Reverse engineering da DynamoDB**: utilizza la mappatura relazionale degli oggetti (ORM) di PynamoDB per decodificare i modelli PynamoDB e le funzioni CRUD per le tabelle Amazon DynamoDB esistenti.

## Prerequisiti e limitazioni
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS
+ [Python versione 3.8 o successiva, scaricata e installata](https://www.python.org/downloads/)
+ [Jinja2 versione 3.1.2 o successiva, scaricato e installato](https://pypi.org/project/Jinja2/#files)
+ Tabelle Amazon DynamoDB per le quali desideri generare ORM
+ AWS Command Line Interface [https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ [PynamoDB versione 5.4.1 o successiva, installato](https://pynamodb.readthedocs.io/en/stable/tutorial.html#installation)

## Architecture
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-architecture"></a>

**Stack tecnologico Target**
+ Script JSON
+ Applicazione Python
+ Modello PynamoDB
+ Istanza di database Amazon DynamoDB

**Architettura di destinazione**

![\[Utilizzo di un'app Python per generare funzioni CRUD e modelli PynamoDB dalle tabelle DynamoDB.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/74cc4c73-5c8b-448d-98fb-b681cfa5f860/images/c2c367d6-d88a-4f49-8571-89160539eb08.png)


1. Si crea un file di schema JSON di input. Questo file di schema JSON rappresenta gli attributi delle rispettive tabelle DynamoDB da cui si desidera creare i modelli PynamoDB e le funzioni CRUD. Contiene le seguenti tre chiavi importanti:
   + `name`—Il nome della tabella DynamoDB di destinazione.
   + `region`— Il Regione AWS luogo in cui è ospitata la tabella
   + `attributes`[— Gli attributi che fanno parte della tabella di destinazione, come la [chiave di partizione](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey) (nota anche come *attributo hash*), la chiave di [ordinamento, gli [indici secondari locali, gli indici secondari](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LSI.html)[globali](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html) e tutti gli attributi non chiave](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey).](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.TablesItemsAttributes) Questo strumento prevede che lo schema di input fornisca solo gli attributi non chiave poiché l'applicazione recupera gli attributi chiave direttamente dalla tabella di destinazione. Per un esempio di come specificare gli attributi nel file di schema JSON, consultate la sezione [Informazioni aggiuntive](#automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-additional) di questo modello.

1. Esegui l'applicazione Python e fornisci il file di schema JSON come input.

1. L'applicazione Python legge il file di schema JSON.

1. L'applicazione Python si connette alle tabelle DynamoDB per derivare lo schema e i tipi di dati. L'applicazione esegue l'operazione [describe\$1table](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/describe_table.html) e recupera gli attributi chiave e indice per la tabella.

1. L'applicazione Python combina gli attributi del file di schema JSON e della tabella DynamoDB. Utilizza il motore di template Jinja per generare un modello Pynamodb e le funzioni CRUD corrispondenti.

1. Si accede al modello PynamoDB per eseguire operazioni CRUD sulla tabella DynamoDB.

## Tools (Strumenti)
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-tools"></a>

**Servizi AWS**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) è un servizio di database NoSQL interamente gestito che offre prestazioni elevate, prevedibili e scalabili.

**Altri strumenti**
+ [Jinja](https://jinja.palletsprojects.com/en/) è un motore di template estensibile che compila i modelli in codice Python ottimizzato. Questo modello utilizza Jinja per generare contenuti dinamici incorporando segnaposto e logica nei modelli.
+ [PynamoDB](https://pynamodb.readthedocs.io/en/stable/) è un'interfaccia basata su Python per Amazon DynamoDB.
+ [Python](https://www.python.org/) è un linguaggio di programmazione per computer generico.

**Deposito di codice**

Il codice per questo modello è disponibile nel repository di modelli [PynamoDB a GitHub generazione automatica](https://github.com/aws-samples/amazon-reverse-engineer-dynamodb) e funzioni CRUD. Il repository è diviso in due parti principali: il pacchetto controller e i modelli.

*Pacchetto controller*

Il pacchetto Python del controller contiene la logica dell'applicazione principale che aiuta a generare il modello PynamoDB e le funzioni CRUD. Contiene i seguenti dati:
+ `input_json_validator.py`— Questi script Python convalidano il file di schema JSON di input e creano gli oggetti Python che contengono l'elenco delle tabelle DynamoDB di destinazione e gli attributi richiesti per ciascuna di esse.
+ `dynamo_connection.py`— Questo script stabilisce una connessione alla tabella DynamoDB e utilizza `describe_table` l'operazione per estrarre gli attributi necessari per creare il modello PynamoDB.
+ `generate_model.py`— Questo script contiene una classe Python `GenerateModel` che crea il modello PynamoDB basato sul file di schema JSON di input e sull'operazione. `describe_table`
+ `generate_crud.py`— Per le tabelle DynamoDB definite nel file di schema JSON, questo script utilizza l'operazione per creare `GenerateCrud` le classi Python.

*Modelli*

Questa directory Python contiene i seguenti modelli Jinja:
+ `model.jinja`— Questo modello Jinja contiene l'espressione del modello per generare lo script del modello PynamoDB.
+ `crud.jinja`— Questo modello Jinja contiene l'espressione del modello per la generazione dello script delle funzioni CRUD.

## Poemi epici
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-epics"></a>

### Configura l'ambiente
<a name="set-up-the-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository. | Immettere il seguente comando per clonare il repository di modelli [PynamoDB e funzioni CRUD a generazione automatica](https://github.com/aws-samples/amazon-reverse-engineer-dynamodb).<pre>git clone https://github.com/aws-samples/amazon-reverse-engineer-dynamodb.git</pre> | Sviluppatore di app | 
| Configura l'ambiente Python. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.html) | Sviluppatore di app | 

### Genera il modello PynamoDB e le funzioni CRUD
<a name="generate-the-pynamodb-model-and-crud-functions"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Modifica il file dello schema JSON. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.html) | Sviluppatore di app | 
| Esegui l'applicazione Python. | Inserisci il seguente comando per generare i modelli Pynamodb e le funzioni CRUD, `<input_schema.json>` dov'è il nome del tuo file di schema JSON.<pre>python main.py --file <input_schema.json></pre> | Sviluppatore di app | 

### Verifica il modello PynamoDB e le funzioni CRUD
<a name="verify-the-pynamodb-model-and-crud-functions"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Verifica il modello Pynamodb generato. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.html) | Sviluppatore di app | 
| Verifica le funzioni CRUD generate. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.html) | Sviluppatore di app | 

## Risorse correlate
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-resources"></a>
+ [Componenti principali di Amazon DynamoDB (documentazione](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html) DynamoDB)
+ [Miglioramento dell'accesso ai dati con indici secondari](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SecondaryIndexes.html) (documentazione DynamoDB)

## Informazioni aggiuntive
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-additional"></a>

**Attributi di esempio per il file di schema JSON**

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