Dynamo DB 是 AWS 在大量託管資料庫中提供的 NoSQL 產品,作為其提供的服務。與大多數其他服務一樣,它完全無伺服器、靈活且易於擴展。
由於我們正在研究 NoSQL,因此對資料結構沒有真正的限制。我們可以使用鍵值對作為表中每個項的屬性進行操作。 讓我們再看看這些關鍵字。
表 - 一個相當熟悉的術語,它本質上是資料的集合,在本例中為項目。這也是在控制台上使用 DynamoDB 的起點。
Item - 表中的條目。您可以將其視為 SQL 等效資料庫中的一行。
屬性 - 構成項目的資料點。它可以包含特定於項目的屬性、元資料或幾乎任何可以與項目關聯的內容。
您可以將 JSON 陣列視為 DynamoDB 中的表格的等效項。我相信當我們創建自己的表格時,事情會變得更加清晰。
從 AWS 控制台在 DynamoDB 中建立新表簡直就是小菜一碟。您所需要的只是一個名稱和一個分區鍵,在本例中這是您的主鍵。這將幫助您搜尋表中的項目。
我正在為我玩過的所有遊戲創建一個表格,我會給它們評分(滿分 10 分):)
您可以直接從控制台弄亂表格,讓我們嘗試新增一個項目看看它是什麼樣子。
我的第一個作品必須是我最喜歡的 RPG(角色扮演)遊戲 - 《巫師 3》。我將為評分添加一個新屬性,這將是我的 9.8 分:)
對了,現在是時候編寫一些 Python 程式碼來在沒有 GUI 的情況下完成所有這些工作了;)
## 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)
Python 的美妙之處在於您只需幾行程式碼即可設定完整的 API。現在,這段程式碼足以讓我們存取該表並從中獲取資料。我們使用掃描功能從遊戲桌上取得項目。
您可以使用 python3 app.py 啟動應用程式
當您捲曲 /games 端點時,您可以期待如下所示的回應。
## 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)
在這裡,我們使用 put_item 將項目新增到表中。為了更新記錄,我們使用函數 update_item。
如果您仔細觀察,我們正在使用 UpdateExpression 來指定要更新的屬性。這使我們能夠準確控制哪個屬性被更改並避免意外覆蓋。
要刪除記錄,您可以使用類似的操作 -
# 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
好了,你已經完成了,借助 Python,您只需幾分鐘即可為 DynamoDB 設定具有 CRUD 功能的 REST API。
以上是在 Python 中為 DynamoDB 設定 REST API的詳細內容。更多資訊請關注PHP中文網其他相關文章!