ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

使用 CerealBox 将 AWS DynamoDB JSON 序列化为 Python dict

2022-09-02 08:33:05  阅读:217  来源: 互联网

标签:Python 数据类型 AWS DynamoDB JSON 类型 CerealBox 序列化


使用 CerealBox 将 AWS DynamoDB JSON 序列化为 Python dict

在这里,我们讨论了一个快速演练和参考代码,用于为您的下一个 AWS 应用程序简化 DynamoDB JSON 序列化过程。

绒毛在哪里?

当我开始使用 DynamoDB 时,我喜欢它的设置和入门是多么容易,无需担心可扩展性、可扩展性或可用性。直到我在客户端应用程序上创建数据模型时遇到了这个 JSON 序列化问题,一切似乎都井井有条。

“如果你只是坚持公地,事情就会变得如此简单,不是吗?”

好吧,当涉及到我们最喜欢的 AWS 解决方案之一 DynamoDB 数据库时,情况并非如此,这就是它的模糊之处。

数据类型

DynamoDB 固有地支持 3 种数据类型——字符串、数字和二进制——其余的通用数据类型是这些基本类型的简单派生。如果我们尝试用通用 Java 数据类型映射它们,我们会得到如下映射 -

Java 类型 对比 DynamoDB 类型
所有号码类型 - > _ñ_ (数字类型)
字符串->
_小号_ (字符串类型)
布尔值 ->
_布尔值_ (布尔类型),0 或 1
字节缓冲区->
_乙_ (二进制类型)
日期 ->
_小号_ _(字符串类型),存储为 ISO-8601 格式的字符串
_ 集合类型 - > _党卫军_ (字符串集)类型, _NS_ (数字集)类型,或 _学士学位_ (二进制集)类型

Java 映射器参考: Amazon DynamoDB 开发人员指南

我们的设置

为了理解这个问题并演示解决方案,让我们设置一个 DynamoDB 表,其中包含一些关于动画电影的随机数据(只是因为我喜欢它们)。

步骤1 : 创建 dynamodb 表 'movies'

Create dynamodb table ‘ movies ’ with ‘ title ’ as PartitionKey and ‘ genre ’ as SortKey

第2步 :添加具有不同数据类型的示例记录

这可以通过以下两种方式中的任何一种来完成 - 使用表单视图或在 DynamoDB 表的创建项目选项下提供的 JSON 视图

例如,让我们在某些假设下为电影“海兽”添加一条记录 -

Data types for movies table item constituents

Sample movie record added with multiple data types

第 3 步 : 客户端代码设置

现在是 Python 客户端——让我们将其设置为 3 个类的结构,这些类可以进一步扩展以在未来提供额外的特性——

  • DatabaseHelper — DynamoDB 查询的处理程序

  • MovieModel — 数据库调用和响应格式化管理器

  • Main - 这是管理执行流程的地方,将其视为将请求电影详细信息的用户界面

问题

通常,为了在 Python 中将任何响应对象转换为可管理的 json 格式流,我们使用 json.dumps(),这就是我们尝试在 常规方法 在 MovieModel 类中进行了评论。

反序列化尝试

要了解 DynamoDB json 的类型转换问题,请取消注释 常规方法 在 MovieModel 类中并注释 谷物盒方法 .现在运行主文件——

$ python3 main_movie_dynamodb_example_runner.py

观察和例外

这会导致错误 语言 场地 -

TypeError:类型集的对象不是 JSON 可序列化的

出现此问题是因为 StringSet 的输入数据类型无法识别为常规 Java 数据类型导致序列化失败。

解决方案

这个确切的序列化问题由 CerealBox 库管理,该库提供对 DynamoDB JSON 的开箱即用支持。

根据他们的官方简介——

CerealBox 是用于 python 字典的极快的零依赖通用序列化器/反序列化器。它具有可扩展的架构,允许通过 config 构建自定义序列化程序。该模块还包括将常见数据类型序列化为 JSON 兼容字典或 DynamoDB JSON 的内置实现。

参考图书馆: https://github.com/a2d24/cerealbox

使用 CerealBox 库进行序列化

现在在上面的同一个例子中,尝试运行主程序,而 谷物盒方法 未注释并且 常规方法 在 MovieModel 类中被注释。现在,这将以正确的格式序列化响应,并在控制台上打印电影详细信息 -

{'languages': ['Spanish', 'French', 'English'], 'userRating': '4.8', 'isReleased': True, 'releaseYear': '2022', 'genre': 'Adventure' , 'title': '海兽'}
在数据库中找不到电影。

我们现在可以从这个序列化的响应数据中构建数据模型,并在我们的应用程序中像常规 JSON 一样进一步使用它。

CerealBox 使用以下映射将 DynamoDB json 序列化为 Python dict —

DynamoDB JSON to Python Dict mapping done by CerealBox

结论

因此,虽然与 AWS DynamoDB 合作有其自身的优势和劣势,但 CerealBox 让您在迁移/采用云期间能够非常轻松地驾驭复杂的应用程序数据级别。 ❤️

把它包起来

请在评论中分享 你遇到如此低级的设计问题以及大象经历的时候,你在推过那个尾端时会感到头痒。

  • — 如果这次快速总结对您有所帮助,请鼓掌
  • — 与寻找答案的好奇者分享这篇文章
  • ➕ — 按下 跟随 调整更多此类简化的东西 , 移动应用程序开发系统

[

汉堡类比:命令式与声明式编程风格

理解历史评估的系统设计范式的基本方法

更好的编程.pub

](https://betterprogramming.pub/the-burger-analogy-for-imperative-vs-declarative-styles-of-programming-3caf026fd553)

[

使用 Mosquitto MQTT 代理流式处理 Flutter 事件

通过counter app示例程序探索Flutter中MQTT消息协议的威力

更好的编程.pub

](https://betterprogramming.pub/streaming-flutter-events-with-mosquitto-mqtt-broker-28998a3b81c2)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/10918/15260208

标签:Python,数据类型,AWS,DynamoDB,JSON,类型,CerealBox,序列化
来源: https://www.cnblogs.com/amboke/p/16648478.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有