Python 使更改在Boto中持久化
我有一个SimpleDB实例,我使用boto for Python更新和读取该实例:Python 使更改在Boto中持久化,python,amazon-simpledb,boto,Python,Amazon Simpledb,Boto,我有一个SimpleDB实例,我使用boto for Python更新和读取该实例: sdb = boto.connect_sdb(access_key, secret_key) domain = sdb.get_domain('DomainName') itemName = 'UserID' itemAttr = {'key1': 'val1', 'key2': val2} userDom.put_attributes(itemName, itemAtt
sdb = boto.connect_sdb(access_key, secret_key)
domain = sdb.get_domain('DomainName')
itemName = 'UserID'
itemAttr = {'key1': 'val1', 'key2': val2}
userDom.put_attributes(itemName, itemAttr)
这是预期的效果。将在域中插入名为“UserID”、值为val1和val2的新项
现在,我面临的问题是,如果我在更新域的属性后立即查询该域
query = 'select * from `DomainName` where key1=val1'
check = domain.select(query)
itemName = check.next()['key2']
我将得到一个错误,因为无法找到行中的值。但是,如果我在写入和读取之间添加time.sleep1,一切都会正常工作
我怀疑这个问题是由于put_atributes向数据库发送写入信号,但不会等到这个更改被持久化。我也尝试过使用创建项目然后保存该项目来编写。保存没有太大成功。有人知道如何确保在继续执行下一个操作之前已在SimpleDB实例中写入值吗
谢谢。这里的问题是,默认情况下,SimpleDB最终是一致的。因此,当您写入数据,然后立即尝试读取数据时,虽然可以保证数据最终是一致的,但不能保证获得最新的数据。对于SimpleDB,最终通常意味着不到一秒钟,但无法保证需要多长时间 但是,有一种方法可以告诉SimpleDB,您需要一致的数据视图,并且在必要时愿意等待。您可以通过稍微更改查询代码来实现这一点:
query = 'select * from `DomainName` where key1=val1'
check = domain.select(query, consistent_read=True)
itemName = check.next()['key2']
这应该总是返回最新的值。谢谢,这非常有效。我在使用consistent_read时遇到问题,因为我使用的是boto版本1.9b,升级到2.3.0并解决了它。