Python / Boto3:不支持浮点类型。请改用 Decimal 类型

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

我使用 Python 3.7 将数据存储在 DynamoDB 数据库中,当我尝试将项目写入数据库时遇到以下错误消息:

Float types are not supported. Use Decimal types instead.

我的代码:

ddb_table = my_client.Table(table_name)

with ddb_table.batch_writer() as batch:
    for item in items:
        item_to_put: dict = json.loads(json.dumps(item), parse_float=Decimal)

        # Send record to database.
        batch.put_item(Item=item_to_put)

“items”是 Python 字典的列表。如果我打印出“item_to_put”字典的类型,它们都是 str 类型。

预先感谢您的帮助。

python amazon-dynamodb boto3
4个回答
45
投票

将所有浮点数转换为小数

import json
from decimal import Decimal
item = json.loads(json.dumps(item), parse_float=Decimal)

table.put_item(
    Item=item
)

7
投票

遇到了同样的问题,结果发现 Python 将字符串参数作为其他参数传递。当我将所有项目包装在 str() 中时,问题就消失了。


0
投票

这里同样的问题。就我而言,这是因为我的一些记录没有特定的密钥,并且默认情况下该密钥是用 nan 自动添加的(我猜?)。我添加了一些简单的逻辑来检查该键是否是一个列表,如果不是,则在运行

batch.put_item
之前将其设置为空列表,这似乎满足了 Dynamo 野兽的要求。


0
投票

添加:从十进制导入十进制 表达式上方。这应该可以解决问题

© www.soinside.com 2019 - 2024. All rights reserved.