

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Automatisches Generieren eines PynamoDB-Modells und CRUD-Funktionen für Amazon DynamoDB mithilfe einer Python-Anwendung
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application"></a>

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

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

Es ist üblich, Entitäten und CRUD-Operationsfunktionen (Create, Read, Update and Delete) zu verlangen, um Amazon DynamoDB DynamoDB-Datenbankoperationen effizient durchzuführen. PynamoDB ist eine Python-basierte Schnittstelle, die Python 3 unterstützt. Es bietet auch Funktionen wie Unterstützung für Amazon DynamoDB-Transaktionen, automatische Serialisierung und Deserialisierung von Attributwerten sowie Kompatibilität mit gängigen Python-Frameworks wie Flask und Django. Dieses Muster hilft Entwicklern, die mit Python und DynamoDB arbeiten, indem es eine Bibliothek bereitstellt, die die automatische Erstellung von PynamoDB-Modellen und CRUD-Betriebsfunktionen optimiert. Es generiert zwar wichtige CRUD-Funktionen für Datenbanktabellen, kann aber auch PynamoDB-Modelle und CRUD-Funktionen aus Amazon DynamoDB-Tabellen zurückentwickeln. Dieses Muster wurde entwickelt, um Datenbankoperationen mithilfe einer Python-basierten Anwendung zu vereinfachen.

Im Folgenden sind die Hauptmerkmale dieser Lösung aufgeführt:
+ **JSON-Schema zu PynamoDB-Modell** — Generieren Sie automatisch PynamoDB-Modelle in Python, indem Sie eine JSON-Schemadatei importieren.
+ Generierung von **CRUD-Funktionen — Generieren** Sie automatisch Funktionen zur Ausführung von CRUD-Operationen in DynamoDB-Tabellen.
+ **Reverse Engineering von DynamoDB** — Verwenden Sie PynamoDB Object-Relational Mapping (ORM), um PynamoDB-Modelle und CRUD-Funktionen für bestehende Amazon DynamoDB-Tabellen zurückzuentwickeln.

## Voraussetzungen und Einschränkungen
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-prereqs"></a>

**Voraussetzungen**
+ Ein aktiver AWS-Konto
+ Python Version 3.8 oder höher, [heruntergeladen](https://www.python.org/downloads/) und installiert
+ [Jinja2 Version 3.1.2 oder höher, heruntergeladen und installiert](https://pypi.org/project/Jinja2/#files)
+ Amazon DynamoDB-Tabellen, für die Sie ORM generieren möchten
+ AWS Command Line Interface [(AWS CLI), [installiert und konfiguriert](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [PynamoDB Version 5.4.1 oder höher, installiert](https://pynamodb.readthedocs.io/en/stable/tutorial.html#installation)

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

**Zieltechnologie-Stack**
+ JSON-Skript
+ Python-Anwendung
+ PynamoDB-Modell
+ Amazon DynamoDB DynamoDB-Datenbank-Instance

**Zielarchitektur**

![\[Verwenden einer Python-App zum Generieren von CRUD-Funktionen und eines PynamoDB-Modells aus DynamoDB-Tabellen.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/74cc4c73-5c8b-448d-98fb-b681cfa5f860/images/c2c367d6-d88a-4f49-8571-89160539eb08.png)


1. Sie erstellen eine Eingabe-JSON-Schemadatei. Diese JSON-Schemadatei stellt die Attribute der jeweiligen DynamoDB-Tabellen dar, aus denen Sie PynamoDB-Modelle und CRUD-Funktionen erstellen möchten. Sie enthält die folgenden drei wichtigen Schlüssel:
   + `name`— Der Name der DynamoDB-Zieltabelle.
   + `region`— Der AWS-Region Ort, an dem die Tabelle gehostet wird
   + `attributes`— Die Attribute, die Teil der Zieltabelle sind, wie z. B. der [Partitionsschlüssel](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey) (auch als *Hash-Attribut* bezeichnet), der [Sortierschlüssel](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey), [lokale Sekundärindizes](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LSI.html), [globale Sekundärindizes](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html) und alle [Nichtschlüsselattribute](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.TablesItemsAttributes). Dieses Tool erwartet, dass das Eingabeschema nur die Nicht-Schlüsselattribute bereitstellt, da die Anwendung die Schlüsselattribute direkt aus der Zieltabelle abruft. Ein Beispiel für die Angabe von Attributen in der JSON-Schemadatei finden Sie im Abschnitt [Zusätzliche Informationen](#automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-additional) dieses Musters.

1. Führen Sie die Python-Anwendung aus und geben Sie die JSON-Schemadatei als Eingabe an.

1. Die Python-Anwendung liest die JSON-Schemadatei.

1. Die Python-Anwendung stellt eine Verbindung zu den DynamoDB-Tabellen her, um das Schema und die Datentypen abzuleiten. Die Anwendung führt den Vorgang [describe\$1table](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/describe_table.html) aus und ruft die Schlüssel- und Indexattribute für die Tabelle ab.

1. Die Python-Anwendung kombiniert die Attribute aus der JSON-Schemadatei und der DynamoDB-Tabelle. Es verwendet die Jinja-Template-Engine, um ein PynamoDB-Modell und entsprechende CRUD-Funktionen zu generieren.

1. Sie greifen auf das PynamoDB-Modell zu, um CRUD-Operationen in der DynamoDB-Tabelle durchzuführen.

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

**AWS-Services**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) ist ein vollständig verwalteter NoSQL-Datenbank-Service, der schnelle und planbare Leistung mit nahtloser Skalierbarkeit bereitstellt.

**Andere Tools**
+ [Jinja](https://jinja.palletsprojects.com/en/) ist eine erweiterbare Templating-Engine, die Vorlagen zu optimiertem Python-Code kompiliert. Dieses Muster verwendet Jinja, um dynamische Inhalte zu generieren, indem Platzhalter und Logik in Vorlagen eingebettet werden.
+ [PynamoDB](https://pynamodb.readthedocs.io/en/stable/) ist eine Python-basierte Schnittstelle für Amazon DynamoDB.
+ [Python](https://www.python.org/) ist eine Allzweck-Computerprogrammiersprache.

**Code-Repository**

Der Code für dieses Muster ist im Repository für GitHub [automatisch generierte PynamoDB-Modelle und](https://github.com/aws-samples/amazon-reverse-engineer-dynamodb) CRUD-Funktionen verfügbar. Das Repository ist in zwei Hauptteile unterteilt: das Controller-Paket und die Vorlagen.

*Controller-Paket*

Das Controller-Python-Paket enthält die Hauptanwendungslogik, die bei der Generierung des PynamoDB-Modells und der CRUD-Funktionen hilft. Sie enthält Folgendes:
+ `input_json_validator.py`— Dieses Python-Skript validiert die Eingabe-JSON-Schemadatei und erstellt die Python-Objekte, die die Liste der DynamoDB-Zieltabellen und die jeweils erforderlichen Attribute enthalten.
+ `dynamo_connection.py`— Dieses Skript stellt eine Verbindung zur DynamoDB-Tabelle her und verwendet die `describe_table` Operation, um die Attribute zu extrahieren, die für die Erstellung des PynamoDB-Modells erforderlich sind.
+ `generate_model.py`— Dieses Skript enthält eine Python-Klasse`GenerateModel`, die das PynamoDB-Modell auf der Grundlage der Eingabe-JSON-Schemadatei und der Operation erstellt. `describe_table`
+ `generate_crud.py`— Für die DynamoDB-Tabellen, die in der JSON-Schemadatei definiert sind, verwendet dieses Skript den `GenerateCrud` Vorgang, um die Python-Klassen zu erstellen.

*Vorlagen*

Dieses Python-Verzeichnis enthält die folgenden Jinja-Vorlagen:
+ `model.jinja`— Diese Jinja-Vorlage enthält den Vorlagenausdruck für die Generierung des PynamoDB-Modellskripts.
+ `crud.jinja`— Diese Jinja-Vorlage enthält den Vorlagenausdruck für die Generierung des CRUD-Funktionsskripts.

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

### Richte die Umgebung ein
<a name="set-up-the-environment"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Klonen Sie das Repository | Geben Sie den folgenden Befehl ein, um das Repository für [automatisch generierte PynamoDB-Modelle und](https://github.com/aws-samples/amazon-reverse-engineer-dynamodb) CRUD-Funktionen zu klonen.<pre>git clone https://github.com/aws-samples/amazon-reverse-engineer-dynamodb.git</pre> | App-Developer | 
| Richten Sie die Python-Umgebung ein. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.html) | App-Developer | 

### Generieren Sie das PynamoDB-Modell und die CRUD-Funktionen
<a name="generate-the-pynamodb-model-and-crud-functions"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Ändern Sie die JSON-Schemadatei. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.html) | App-Developer | 
| Führen Sie die Python-Anwendung aus. | Geben Sie den folgenden Befehl ein, um die PynamoDB-Modelle und CRUD-Funktionen zu generieren, wobei der Name Ihrer JSON-Schemadatei `<input_schema.json>` steht.<pre>python main.py --file <input_schema.json></pre> | App-Developer | 

### Überprüfen Sie das PynamoDB-Modell und die CRUD-Funktionen
<a name="verify-the-pynamodb-model-and-crud-functions"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Überprüfen Sie das generierte PynamoDB-Modell. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.html) | App-Developer | 
| Überprüfen Sie die generierten CRUD-Funktionen. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.html) | App-Developer | 

## Zugehörige Ressourcen
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-resources"></a>
+ [Kernkomponenten von Amazon DynamoDB (DynamoDB-Dokumentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html))
+ [Verbesserung des Datenzugriffs mit Sekundärindizes](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SecondaryIndexes.html) (DynamoDB-Dokumentation)

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

**Beispielattribute für die JSON-Schemadatei**

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