Dynamo DB ist das NoSQL-Angebot von AWS in der umfangreichen Palette verwalteter Datenbanken als Service, die sie anbieten. Wie die meisten anderen Dienste ist es vollständig serverlos, flexibel und einfach zu skalieren.
Da wir hier mit NoSQL arbeiten, gibt es keine wirkliche Einschränkung hinsichtlich der Datenstruktur. Wir können mit Schlüssel-Wert-Paaren als Attribute für jedes Element in einer Tabelle arbeiten. Schauen wir uns diese Schlüsselwörter noch einmal an.
Tabelle – ein ziemlich bekannter Begriff, es handelt sich im Wesentlichen um eine Sammlung von Daten, in diesem Fall Elementen. Es ist auch der Ausgangspunkt für die Arbeit mit DynamoDB auf der Konsole.
Item – ein Eintrag in einer Tabelle. Sie könnten es als Zeile in einer SQL-äquivalenten Datenbank betrachten.
Attribut – Die Datenpunkte, die ein Element bilden. Es könnte artikelspezifische Attribute, Metadaten oder praktisch alles enthalten, was mit einem Artikel verknüpft werden kann.
Sie können sich ein JSON-Array als Äquivalent zu einer Tabelle in DynamoDB vorstellen. Ich bin mir sicher, dass die Dinge klarer werden, wenn wir unsere eigene Tabelle erstellen.
Es ist buchstäblich ein Kinderspiel, über die AWS-Konsole eine neue Tabelle in DynamoDB zu erstellen. Sie benötigen lediglich einen Namen und einen Partitionsschlüssel, der in diesem Fall Ihr Primärschlüssel ist. Dies hilft Ihnen bei der Suche nach Elementen in der Tabelle.
Ich erstelle eine Tabelle für alle Spiele, die ich gespielt habe, und werde sie mit maximal 10 bewerten :)
Sie können direkt von der Konsole aus mit der Tabelle herumspielen. Versuchen wir, ein neues Element hinzuzufügen, um zu sehen, wie es aussieht.
Mein erster Eintrag muss mein Lieblings-RPG (Rollenspiel) sein – The Witcher 3. Ich werde ein neues Attribut für die Bewertung hinzufügen und es wird eine solide 9,8 von mir sein :)
Richtig, jetzt ist es an der Zeit, etwas Python-Code zu schreiben, um das alles ohne die GUI zu erledigen ;)
## app.py from flask import Flask, jsonify, request import boto3 from boto3.dynamodb.conditions import Key import uuid # Import uuid module for generating UUIDs app = Flask(__name__) # Initialize DynamoDB client dynamodb = boto3.resource('dynamodb', region_name='ap-south-1') # Replace with your region ## Do keep in mind to save your AWS credentials file in the root directory table = dynamodb.Table('games') # Replace with your table name # Route to get all games @app.route('/games', methods=['GET']) def get_games(): try: response = table.scan() games = response.get('Items', []) return jsonify({'games': games}), 200 except Exception as e: return jsonify({'error': str(e)}), 500 if __name__ == '__main__': app.run(debug=True)
Das Schöne an Python ist, dass Sie mit nur wenigen Codezeilen eine vollwertige API einrichten können. Dieser Codeabschnitt reicht nun aus, um auf die Tabelle zuzugreifen und die Daten daraus abzurufen. Wir nutzen die Scan-Funktion, um Gegenstände vom Spieltisch abzurufen.
Sie können die App starten, indem Sie python3 app.py verwenden
Und Sie können eine Antwort erwarten, die so aussieht, wenn Sie sich für den /games-Endpunkt entscheiden.
## app.py from flask import Flask, jsonify, request import boto3 from boto3.dynamodb.conditions import Key import uuid # Import uuid module for generating UUIDs app = Flask(__name__) # Initialize DynamoDB client dynamodb = boto3.resource('dynamodb', region_name='ap-south-1') # Replace with your region ## Do keep in mind to save your AWS credentials file in the root directory table = dynamodb.Table('games') # Replace with your table name # Route to get all games @app.route('/games', methods=['GET']) def get_games(): try: response = table.scan() games = response.get('Items', []) return jsonify({'games': games}), 200 except Exception as e: return jsonify({'error': str(e)}), 500 if __name__ == '__main__': app.run(debug=True)
Hier verwenden wir put_item, um der Tabelle ein Element hinzuzufügen. Zum Aktualisieren eines Datensatzes verwenden wir die Funktion update_item.
Wenn Sie genau hinschauen, verwenden wir UpdateExpression, wo wir die Attribute angeben, die wir aktualisieren. Dadurch können wir genau steuern, welches Attribut geändert wird, und versehentliches Überschreiben vermeiden.
Und um den Datensatz zu löschen, können Sie so etwas tun -
# Route to create a new game @app.route('/games', methods=['POST']) def create_game(): try: game_data = request.get_json() name = game_data.get('name') rating = game_data.get('rating') hours = game_data.get('hours', 0) # Generate a random UUID for the new game id = str(uuid.uuid4()) if not name or not rating: return jsonify({'error': 'Missing required fields'}), 400 # Store the game in DynamoDB table.put_item(Item={'id': id, 'name': name, 'rating': rating, 'hours': hours}) # Return the created game with the generated UUID created_game = {'id': id, 'name': name, 'rating': rating} return jsonify({'message': 'Game added successfully', 'game': created_game}), 201 except Exception as e: return jsonify({'error': str(e)}), 500 # Route to update an existing game @app.route('/games/<int:id>', methods=['PUT']) def update_game(id): try: game_data = request.get_json() name = game_data.get('name') rating = game_data.get('rating') hours = game_data.get('hours', 0) if not name and not rating: return jsonify({'error': 'Nothing to update'}), 400 update_expression = 'SET ' expression_attribute_values = {} if name: update_expression += ' #n = :n,' expression_attribute_values[':n'] = name if rating: update_expression += ' #r = :r,' expression_attribute_values[':r'] = rating if hours: update_expression += ' #h = :h,' expression_attribute_values[':h'] = hours update_expression = update_expression[:-1] # remove trailing comma response = table.update_item( Key={'id': id}, UpdateExpression=update_expression, ExpressionAttributeNames={'#n': 'name', '#r': 'rating', '#h': 'hours'}, ExpressionAttributeValues=expression_attribute_values, ReturnValues='UPDATED_NEW' ) updated_game = response.get('Attributes', {}) return jsonify(updated_game), 200 except Exception as e: return jsonify({'error': str(e)}), 500
Nun, da haben Sie es, Sie haben dank Python in wenigen Minuten eine REST-API mit CRUD-Funktionalität für DynamoDB eingerichtet.
Das obige ist der detaillierte Inhalt vonEinrichten einer REST-API in Python für DynamoDB. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!