使用 Python 应用程序为亚马逊 DynamoDB 自动生成 PynamoDB 模型和 CRUD 函数 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Python 应用程序为亚马逊 DynamoDB 自动生成 PynamoDB 模型和 CRUD 函数

由 Vijit Vashishtha (AWS)、Dheeraj Alimchandani (AWS) 和 Dhananjay Karanjkar (AWS) 创作

代码存储库:amazon-reverse-engineer-dynamodb

环境:PoC 或试点

技术: DevelopmentAndTesting; 数据库; DevOps

工作负载:开源

Amazon Web Services:Amazon DynamoDB

Summary

为了高效执行 Amazon DynamoDB 数据库操作,通常需要实体以及创建、读取、更新和删除 (CRUD) 操作函数。Pynamodb 是一个基于 Python 的接口,支持 Python 3。它还提供了诸如支持 Amazon DynamoDB 事务、自动属性值序列化和反序列化以及与常见 Python 框架(例如 Flask 和 Django)的兼容性等功能。这种模式提供了一个简化 PynamoDB 模型和 CRUD 操作函数的自动创建的库,从而帮助使用 Python 和 DynamoDB 的开发人员。虽然它可以为数据库表生成基本的 CRUD 函数,但它也可以对 PynamoDB 模型和 Amazon DynamoDB 表中的 CRUD 函数进行逆向工程。此模式旨在通过使用基于 Python 的应用程序来简化数据库操作。

以下是此解决方案的主要特点:

  • PynamoDB 模型的 JSON 架构 — 通过导入 JSO N 架构文件在 Python 中自动生成 PynamoDB 模型。

  • CRUD 函数生成 — 自动生成函数以对 DynamoDB 表执行 CRUD 操作。

  • 来自 DynamoDB 的逆向工程 — 使用 PynamoDB 对象关系映射 (ORM) 对现有亚马逊 DynamoDB 表的 PynamoDB 模型和 CRUD 函数进行逆向工程。

先决条件和限制

先决条件

架构

目标技术堆栈

  • json 脚本

  • Python 应用程序

  • pynamodb 模型

  • 亚马逊 DynamoDB 数据库实例

目标架构

使用 Python 应用程序从 DynamoDB 表中生成 CRUD 函数和 PynamoDB 模型。
  1. 您创建了一个输入 JSON 架构文件。此 JSON 架构文件表示您要从中创建 PynamoDB 模型的相应的 DynamoDB 表的属性以及 CRUD 函数。它包含以下三个重要密钥:

    • name— 目标 DynamoDB 表的名称。

    • region— 托管表格的 AWS 区域

    • attributes— 作为目标表一部分的属性,例如分区键(也称为哈希属性)、排序键本地二级索引全局二级索引以及任何非键属性。当应用程序直接从目标表中获取关键属性时,此工具期望输入架构仅提供非键属性。有关如何在 JSON 架构文件中指定属性的示例,请参阅此模式的 “其他信息” 部分。

  2. 运行 Python 应用程序并提供 JSON 架构文件作为输入。

  3. Python 应用程序会读取 JSON 架构文件。

  4. Python 应用程序连接到 DynamoDB 表以派生架构和数据类型。应用程序运行 desc ribe_table 操作并获取表的键和索引属性。

  5. Python 应用程序结合了 JSON 架构文件和 DynamoDB 表中的属性。它使用 Jinja 模板引擎生成 PynamoDB 模型和相应的 CRUD 函数。

  6. 您可以访问 PynamoDB 模型来对 DynamoDB 表执行 CRUD 操作。

工具

Amazon Web Services

  • Amazon DynamoDB 是一项完全托管的 NoSQL 数据库服务,可提供快速、可预测和可扩展的性能。

其他工具

  • Jinja 是一个可扩展的模板引擎,可将模板编译成经过优化的 Python 代码。这种模式使用 Jinja 通过在模板中嵌入占位符和逻辑来生成动态内容。

  • PynamoDB 是亚马逊 DynamoDB 的基于 Python 的界面。

  • Python 是通用的计算机编程语言。

代码存储库

此模式的代码可在 GitHub 自动生成 Pynamodb 模型和 CRUD 函数存储库中找到。存储库分为两个主要部分:控制器包和模板。

控制器包

控制器 Python 包包含帮助生成 PynamoDB 模型和 CRUD 函数的主要应用程序逻辑。其中包含以下内容:

  • input_json_validator.py— 此 Python 脚本验证输入 JSON 架构文件并创建包含目标 DynamoDB 表列表和每个表所需属性的 Python 对象。

  • dynamo_connection.py— 此脚本建立与 DynamoDB 表的连接,并使用describe_table该操作提取创建 PynamoDB 模型所需的属性。

  • generate_model.py— 此脚本包含一个 Python 类GenerateModel,该类基于输入 JSON 架构文件和操作创建 PynamoDB 模型。describe_table

  • generate_crud.py— 对于 JSON 架构文件中定义的 DynamoDB 表,此脚本使用GenerateCrud操作创建 Python 类。

模板

这个 Python 目录包含以下 Jinja 模板:

  • model.jinja— 这个 Jinja 模板包含用于生成 Pynamodb 模型脚本的模板表达式。

  • crud.jinja— 此 Jinja 模板包含用于生成 CRUD 函数脚本的模板表达式。

操作说明

任务描述所需技能

克隆存储库。

输入以下命令来克隆自动生成 Pynamodb 模型和 CRUD 函数存储库

git clone https://github.com/aws-samples/amazon-reverse-engineer-dynamodb.git
应用程序开发人员

设置 Python 环境。

  1. 导航到克隆存储库中的顶级目录。

    cd amazon-reverse-engineer-dynamodb
  2. 输入以下命令安装所需的库和软件包。

    pip install -r requirements.txt
应用程序开发人员
任务描述所需技能

修改 JSON 架构文件。

  1. 导航到克隆存储库中的顶级目录。

    cd amazon-reverse-engineer-dynamodb
  2. 在您的首选编辑器中打开该test.json文件。您可以使用此文件作为参考来创建自己的 JSON 架构文件,也可以更新此文件中的值以匹配您的环境。

  3. 修改目标 DynamoDB 表的名称 AWS 区域、和属性值。

    注意:如果您定义的表不存在于 JSON 架构文件中,则此解决方案不会为该表生成模型或 CRUD 函数。

  4. 保存并关闭 test.json文件。我们建议您使用新名称保存此文件。

应用程序开发人员

运行 Python 应用程序。

输入以下命令生成 Pynamodb 模型和 CRUD 函数,<input_schema.json>其中是您的 JSON 架构文件的名称。

python main.py --file <input_schema.json>
应用程序开发人员
任务描述所需技能

验证生成的 PynamoDB 模型。

  1. 在克隆存储库的顶级目录中,输入以下命令以导航到models存储库。

    cd models
  2. 默认情况下,此解决方案会命名 Pynamodb 模型文件。demo_model.py验证此文件是否存在。

应用程序开发人员

验证生成的 CRUD 函数。

  1. 在克隆存储库的顶级目录中,输入以下命令以导航到crud存储库。

    cd crud
  2. 默认情况下,此解决方案会命名脚本demo_crud.py。验证此文件是否存在。

  3. 使用demo_crud.py文件中的 Python 类对目标 DynamoDB 表执行 CRUD 操作。确认操作成功完成。

应用程序开发人员

相关资源

其他信息

JSON 架构文件的示例属性

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