<p>为了避免重复,最好的方法是使用“Conditional Put”,这样,如果带有键的项已经存在,新项将不会覆盖现有项。在</p>
<p>请参见python的<a href="http://boto.readthedocs.org/en/latest/ref/dynamodb.html#boto.dynamodb.layer1.Layer1.put_item" rel="nofollow noreferrer">doc</a></p>
<blockquote>
<p>Create a new item or replace an old item with a new item (including
all attributes). If an item already exists in the specified table with
the same primary key, the new item will completely replace the old
item. You can perform a conditional put by specifying an expected
rule.</p>
</blockquote>
<p><a href="https://stackoverflow.com/questions/18117561/boto-dynamodb2-conditional-put-item">some examples</a></p>
<p>您只需要将“expected”作为字典传递到put_item调用。在</p>
<pre><code>expected={
'yourHashKeyName': {'Exists': False}
}
</code></pre>
<p>上面的代码不起作用的原因是dynamoConn.查询将始终返回TableGenerator对象,即使不存在具有该哈希键的项。在</p>
<p>query函数接受一个<a href="http://boto.readthedocs.org/en/latest/ref/dynamodb.html#boto.dynamodb.layer2.Layer2.query" rel="nofollow noreferrer">Count parameter</a>,它返回“查询操作的项目总数,即使该操作没有与指定的筛选器匹配的项目。”</p>
^{pr2}$
<p>然后检查</p>
<pre><code>results.count > 0
</code></pre>
<p>如果这个id已经存在,结果.计数应该是1。否则应为0。在</p>
<p>另一个选择是使用get_item API。您的表没有范围键,可以使用“id”作为hashkey调用get_项。在</p>