尝试使用python boto库插入浮点数时的DynamoDBNumberError

代码段:

conn = dynamo_connect()

company = Table("companydb",connection=conn)

companyrecord = {'company-slug':'www-google-com12','founding-year':1991, 'randomlist' :[1,2,3,4,5], 'randomdict' : {'a':[1,2,3],'b':'something','randomnumber':10.55} }

company.put_item(data=companyrecord)

我收到以下错误:

File "C:\Python27\lib\site-packages\boto\dynamodb2\items.py", line 329, in prepare_full
    final_data[key] = self._dynamizer.encode(value)
  File "C:\Python27\lib\site-packages\boto\dynamodb\types.py", line 279, in encode
    return {dynamodb_type: encoder(attr)}
  File "C:\Python27\lib\site-packages\boto\dynamodb\types.py", line 335, in _encode_m
    return dict([(k, self.encode(v)) for k, v in attr.items()])
  File "C:\Python27\lib\site-packages\boto\dynamodb\types.py", line 279, in encode
    return {dynamodb_type: encoder(attr)}
  File "C:\Python27\lib\site-packages\boto\dynamodb\types.py", line 305, in _encode_n
    raise DynamoDBNumberError(msg)
boto.dynamodb.exceptions.DynamoDBNumberError: BotoClientError: Inexact numeric for `10.55`

最佳答案 是GitHub上有与浮动数相关的已知
issues,可能有2个解决方法,首先如果你愿意存储10.5而不是10.55,那么它会正常工作我猜,另一个是将浮动值存储为String或整数,然后在访问时对其进行调制.

所以你选择了字符串部分然后你可以将它存储为’10 .55’而不是10.55以及之后当你从表中访问值然后你可以简单地使用float(“10.55”)然后你就完成了.

另一种方法是将其存储为整数,首先选择一个精度值(比如说2个十进制值)然后你将1055存储为1055(乘以100,因为2位小数精度),并且在访问它时你可以简单地使用1055 / 100.0,你将获得10.55.

点赞