无法在带有Boto的DynamoDB中将浮点数作为range_keys插入

时间:2012-09-07 21:45:11

标签: python boto amazon-dynamodb

当我尝试插入包含多于2个小数位数的range_key时,数据库中存储的数字将被截断为前2位小数。

我该如何解决这个问题?

    max_number = 1000000.0
    random_time = random.randrange(1, max_number-1) / max_number
    range_key = int(time.time()) + random_time
    data['item_id'] = '12345'
    result = db.add(table='media', key=group_id,
                    range_key = range_key,
                    data=data)

生成的“1347053744.819199”的range_key作为“1347053744.82”插入

1 个答案:

答案 0 :(得分:0)

更新:

这实际上是boto中的错误,请参阅https://github.com/boto/boto/pull/890#issuecomment-8456495进行跟踪

原始回答:

为什么使用add存储新项目? add是原子增量的函数。您应该使用put_item代替。

我不知道为什么你的浮子是圆的,但无论如何,你真的不应该尝试它。使用float作为键是一种不好的做法。不可能可靠地检查浮动平等,因为它们本质上是近似的。请参阅http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.html以深入了解花车。

尽管如此,如果确实需要浮动作为键,则需要完全控制表示,以便在反序列化请求的JSON时不依赖于服务器端实现。您需要用常规字符串替换它。