gpt4 book ai didi

python - 使用 Python/Boto 更新 DynamoDB 原子计数器

转载 作者:太空狗 更新时间:2023-10-29 19:37:53 26 4
gpt4 key购买 nike

我正在尝试使用 Python Boto 2.3.0 更新原子计数计数器,但找不到该操作的文档。

似乎没有直接接口(interface),所以我尝试使用 layer1 接口(interface)进行“原始”更新,但我无法完成即使是简单的更新。

我尝试了以下变体,但都没有成功

dynoConn.update_item(INFLUENCER_DATA_TABLE, 
{'HashKeyElement': "9f08b4f5-d25a-4950-a948-0381c34aed1c"},
{'new': {'Value': {'N':"1"}, 'Action': "ADD"}})

dynoConn.update_item('influencer_data',
{'HashKeyElement': "9f08b4f5-d25a-4950-a948-0381c34aed1c"},
{'new': {'S' :'hello'}})

dynoConn.update_item("influencer_data",
{"HashKeyElement": "9f08b4f5-d25a-4950-a948-0381c34aed1c"},
{"AttributesToPut" : {"new": {"S" :"hello"}}})

它们都产生相同的错误:

  File "/usr/local/lib/python2.6/dist-packages/boto-2.3.0-py2.6.egg/boto/dynamodb/layer1.py", line 164, in _retry_handler
data)
boto.exception.DynamoDBResponseError: DynamoDBResponseError: 400 Bad Request
{u'Message': u'Expected null', u'__type': u'com.amazon.coral.service#SerializationException'}

我还研究了 API 文档 here但他们非常简朴。

我已经做了很多搜索和摆弄,我唯一剩下的就是使用 PHP API 并深入研究代码以找到它在何处“格式化”JSON 主体,但这有点麻烦.请救我脱离那种痛苦!

最佳答案

抱歉,我误解了您要查找的内容。您可以通过 layer2 完成此操作,尽管有一个小错误需要解决。这是一些 Layer2 代码:

>>> import boto
>>> c = boto.connect_dynamodb()
>>> t = c.get_table('counter')
>>> item = t.get_item('counter')
>>> item
{u'id': 'counter', u'n': 1}
>>> item.add_attribute('n', 20)
>>> item.save()
{u'ConsumedCapacityUnits': 1.0}
>>> item # Here's the bug, local Item is not updated
{u'id': 'counter', u'n': 1}
>>> item = t.get_item('counter') # Refetch item just to verify change occurred
>>> item
{u'id': 'counter', u'n': 21}

这会产生与您在 Layer1 代码中执行的相同的在线请求,如以下调试输出所示。

2012-04-27 04:17:59,170 foo [DEBUG]:StringToSign:
POST
/

host:dynamodb.us-east-1.amazonaws.com
x-amz-date:Fri, 27 Apr 2012 11:17:59 GMT
x-amz-security- token:<removed> ==
x-amz-target:DynamoDB_20111205.UpdateItem

{"AttributeUpdates": {"n": {"Action": "ADD", "Value": {"N": "20"}}}, "TableName": "counter", "Key": {"HashKeyElement": {"S": "counter"}}}

如果您想避免最初的 GetItem 调用,您可以改为这样做:

>>> import boto
>>> c = boto.connect_dynamodb()
>>> t = c.get_table('counter')
>>> item = t.new_item('counter')
>>> item.add_attribute('n', 20)
>>> item.save()
{u'ConsumedCapacityUnits': 1.0}

如果项目已经存在则更新该项目,如果项目尚不存在则创建它。

关于python - 使用 Python/Boto 更新 DynamoDB 原子计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10334533/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com