使用 Python 应用程序为 Amazon DynamoDB 自动生成 PynamoDB 模型和 CRUD 函数 - AWS 规范指引

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

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

Vijit Vashishtha、Dheeraj Alimchandani 和 Dhananjay Karanjkar,Amazon Web Services

Summary

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

下面是此解决方案的主要功能:

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

  • CRUD 函数生成 ‒ 自动生成函数以在 DynamoDB 表上执行 CRUD 操作。

  • 从 DynamoDB 逆向工程 ‒ 使用 PynamoDB 对象关系映射(ORM)对现有 Amazon DynamoDB 表的 PynamoDB 模型和 CRUD 函数进行逆向工程。

先决条件和限制

先决条件

  • 活跃的 AWS 账户

  • Python 版本 3.8 或更高版本,已下载并已安装

  • Jinja2 版本 3.1.2 或更高版本,已下载并已安装

  • 您要为其生成 ORM 的 Amazon DynamoDB 表

  • AWS Command Line Interface (AWS CLI),已安装配置

  • PynamoDB 版本 5.4.1 或更高版本,已安装

架构

目标技术堆栈

  • JSON 脚本

  • Python 应用程序

  • PynamoDB 模型

  • Amazon DynamoDB 数据库实例

目标架构

使用 Python 应用程序从 DynamoDB 表生成 CRUD 函数和 PynamoDB 模型。
  1. 您创建了一个输入 JSON 架构文件。此 JSON 架构文件提供了相应的 DynamoDB 表的属性,您需要根据这些表创建 PynamoDB 模型并为这些表创建 CRUD 函数。它包含以下三个重要密钥:

    • name – 目标 DynamoDB 表的名称。

    • region— 桌子的托管 AWS 区域 位置

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

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

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

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

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

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

工具

AWS 服务

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

其他工具

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

  • PynamoDB 是一种基于 Python 的 Amazon DynamoDB 接口。

  • 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 架构文件和 describe_table 操作创建 PynamoDB 模型。

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

模板

Python 目录包含以下 Jinja 模板:

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

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

操作说明

Task说明所需技能

克隆存储库。

输入以下命令克隆自动生成 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
应用程序开发人员
Task说明所需技能

修改 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>
应用程序开发人员
Task说明所需技能

验证生成的 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" } ] } ]