如何将pydantic嵌套模型转换为字典并推送到dynamodb?

问题描述 投票:0回答:1

我有一个 pydantic 模型,示例如下,现在在我的 python 代码中,我正在读取数据并推送到 dynamodb 中。当我打印每条记录时,它具有以下结构

{
   "Name": "jhon"
   "Address": {
      HouseNumber: '20'
      current: true
      street: 'easy street'
   }
}

但是当我将它推到发电机时,在发电机中它看起来像这样,其中,对于门牌号,指示“S”,对于当前指示“BOOL”。 问题:是否可以将其保存为 {"HouseNumber": "20", "current": true} ?

Name | Address
jhon | {"HouseNumber":{"S":"20"},"current": {"BOOL": true}..}
import boto3
dynamo_resource = boto3.Session().resource('dynamodb', region_name='us-west-2')
person_table = dynamo_resource.Table('person')

with person.batch_writer() as batch:
    for i in list:
        #convert to json
        json_string = i.model_dump_json()

        record = json.loads(json_string)

        batch.put_item(record)
from pydantic import BaseModel
from typing import Optional

class Person(BaseModel):
    Name: str
    Address: Optional[Address]

class Address(BaseModel):
   HouseNumber: int
   current: bool
   street: str
python json amazon-dynamodb pydantic
1个回答
0
投票

这是 DynamoDB 的正常行为。它会自动添加类型指示符,例如字符串的

S
、数字的
N
和布尔值的
BOOL
。这就是 DynamoDB 区分不同类型的方式。

在没有它们的情况下存储数据的唯一方法是将对象保存为纯字符串。

with person_table.batch_writer() as batch:
    for i in list:
        record = i.dict()

        batch.put_item(json.dumps(record))
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.