boto.dynamodb2:现有项目的partial_save?

时间:2015-05-20 23:38:30

标签: python amazon-dynamodb boto

我的目标:简单地更新DynamoDB中记录的单个属性。我不想先读这个项目;我只是设置了它的一个属性 - 我不关心属性的先前值是什么,如果有的话。

问题:如果该项目已存在,则boto会抛出ConditionalCheckFailedException

一些说明问题的代码:

from boto.dynamodb2.items import Item
from boto.dynamodb2.table import Table
from time import time

table = Table('my_table')

data = {
    'the_key': '123456',
    'last_seen': time()
}

item = Item(table, data=data)
item.partial_save()

我第一次运行此代码时(当项目123456不存在时),它可以正常工作。创建了项目123456,并设置了其last_seen属性。

第二次运行代码时,它会爆炸:

boto.dynamodb2.exceptions.ConditionalCheckFailedException: ConditionalCheckFailedException: 400 Bad Request
{u'message': u'The conditional request failed', u'__type': u'com.amazonaws.dynamodb.v20120810#ConditionalCheckFailedException'}

查看boto代码,看起来partial_save正在设置expects参数,迫使DynamoDB检查属性的先前值(如果不是预期的话,则会失败)。据我所知,boto试图帮助我意外地覆盖其他一些进程可能已更新的数据。但是,在这种情况下,我并不关心;我只是想盲目地设置属性值,即使这意味着它会覆盖别人的变化。

有没有办法使用boto.dynamodb2? (我使用boto.dynamodb拼凑了一个工作版本,但我真的不想使用已弃用的代码。)

0 个答案:

没有答案