我正在使用lambda函数,我使用boto3将put_item()放入我的DynamoBD表中,并在代码中添加ttl参数(生存时间)。
ttl = str(int(time.time() + 2629746))
这一行给了我一个月的时间,但由于某些原因,我得到了很多这样的错误:
An error occurred (ValidationException) when calling the PutItem operation: The parameter cannot be converted to a numeric value: undefined: ClientError
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 52, in handler
response = c_put_item(d)
File "/var/task/lambda_function.py", line 40, in c_put_item
'ttl':{'N':ttl}
File "/var/runtime/botocore/client.py", line 317, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/var/runtime/botocore/client.py", line 615, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the PutItem operation: The parameter cannot be converted to a numeric value: undefined
知道为什么吗?
PS:即时通讯使用python3
- 编辑:
我添加了更多的代码。 出于某种原因,这不起作用。
ttl = str(int(time.time() + 2629746))
response = client.put_item(TableName='MYTABLENAME',Item={
'item':{'S':item},
'title':{'S':title},
'link':{'S':link},
'price':{'N':price},
'category':{'S':category},
'avaliable':{'S':avaliable},
'image':{'S':image},
'ttl':{'N':ttl}
})
- EDIT2:
AWS docs指定你应该像我一样使用put_item(),除了我被迫使用str()因为我收到了一个错误。
答案 0 :(得分:1)
@kichik实际上对他的评论是正确的。此错误不一定表示ttl为None
。它说整个电话的一个字段是None
。
所以我检测到冲突的字段我添加了一个异常,问题就停止了。
答案 1 :(得分:0)
考虑将ttl
设为整数:ttl = int(time.time() + 2629746)
Boto3 docs, Creating a new item:
有关可用于项目的所有有效类型,请参阅Valid DynamoDB Types:
这些是与Boto3表资源(dynamodb.Table)和DynamoDB一起使用的有效项类型:
•整数 - 数字(N)
•decimal.Decimal - Number(N)