我有一个 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
这是 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))