首页 > 编程语言 >使用 CerealBox 将 AWS DynamoDB JSON 序列化为 Python dict

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

时间:2022-09-02 08:23:18浏览次数:124  
标签: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,序列化
From: https://www.cnblogs.com/amboke/p/16648478.html

相关文章

  • 使用 Python 进行 A/B 测试应用程序
    使用Python进行A/B测试应用程序https://www.reliablesoft.net/ab-testing-principles-optimize-your-marketing-and-skyrocket-conversions/什么是A/B测试?A/B......
  • 使用 Python 保存和显示计算历史
    使用Python保存和显示计算历史仅使用Python显示计算历史的一种非常流行且简单的方法编写一个简单的算术计算器很容易。但是编写一个可以保存和显示计算器历史的计算......
  • python读取PDF文件中的数据
    #-*-coding:utf-8-*-#模块的安装与导入由于pdfplumber和PyPDF2都属于第三方开源模块因此需要我们额外安装#安装pipinstallpdfplumber#pipinstallPyPDF2......
  • python学习Day58
    Day58今日内容概要昨日作业讲解django请求生命周期流程图路由层系统路由匹配(不同版本的django有一点的区别)反向解析无名有名反向解析路由分发名称空间今......
  • 学习python-Day52
    今日学习内容作业讲解用户管理系统(单表)配置文件settings中关于template的文件路径修改和添加。将新建的应用注册接口前缀模型类在models文件中创建各个类对......
  • 用Python做一个中秋节嫦娥投食小游戏《千里婵娟》
    山河远阔,烟火人间,又一年,千里婵娟~今天给大家带来的是给玉兔投喂月饼的小游戏。八月十五中秋夜晚,让我们对着月亮许愿:希望我们在意和在意我们的人,诸邪避退、百事无忌、平......
  • Python获取昨天,今天,明天,本周,上周,本月,上月,本季,本年,去年时间
    importdatetimefromdatetimeimporttimedeltanow=datetime.datetime.now()#今天today=now#昨天yesterday=now-timedelta(days=1)#明天tomorrow......
  • python基础__全局变量
    一、函数中改变全局变量需要加global1value='c919'23defsky1():4globalvalue5value='波音747'6returnvalue78defsky2():9......
  • python带你采集桌游、剧本杀游戏店数据信息~
    前言嗨喽~大家好呀,这里是魔王呐!又是学习的一天,让我们开始叭~环境使用:Python3.8Pycharm模块使用:requests>>>pipinstallrequestsrecsv如......
  • 谣言粉碎机?Python验证股市操盘口诀
    更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。经常炒股的朋友,应该都听说过这段操盘口诀:早上大跌要买,早上大涨要卖下午大涨不追,下......