0

次のコードを使用して、DynamoDB のアイテムを条件付きで更新しようとしています。

from boto.dynamodb2.table import Table

conn = get_layer1_ddb_connection()
values_table = Table(table_name, connection=conn)
attrs = { 'values' : new_values,
          'version' : existing_item['version'] + 1}
condition_expression = 'version = :v'
values_table.update_item(table_name, key=customer_id, attribute_updates=attrs, condition_expression=condition_expression, expression_attribute_values={':v': existing_item['version'],}, return_values='ALL_OLD',)

ここで、layer1 接続は次のように作成されます。

from boto.dynamodb2.layer1 import DynamoDBConnection

def get_layer1_ddb_connection(self):
    return DynamoDBConnection(region=self.region, aws_access_key_id=self.creds[CRED_ACCESS_KEY], aws_secret_access_key=self.creds[CRED_SECRET_KEY])

self.regionは RegionInfo 型であり、self.creds は他の高レベル API 呼び出しに対して常に完全に機能します。

4

2 に答える 2

0

私が間違っていなければ、これは table.py のソースにヒントがあるかもしれません。プライベート_update_item()メソッド内では、実際に を呼び出しますconn.update_item

self.connection.update_item(self.table_name, raw_key, item_data, **kwargs)

update_item()そのため、テーブルの代わりに接続を呼び出してみて、それが役立つかどうかを確認してください。

于 2015-06-13T15:37:33.593 に答える
0

これは私のために働いたものです:

ddb_conn = dynamodb2.connect_to_region(region, self.creds[CRED_ACCESS_KEY], self.creds[CRED_SECRET_KEY], self.creds[CRED_SECURITY_TOKEN])

values_table = Table(table_name, connection=ddb_conn)
key = {"id": {"S": customer_id }}
update_expression = "SET #cv = :new_values, version = :new_version"
condition_expression = "version = :existing_version"
expression_attribute_names = {"#cv" : "customer-values"}

existing_item = values_table.get_item(id=customer_id)
existing_version = existing_item['version']
new_version = existing_version + 1

expression_attribute_values = {":new_values": {"N": str(new_values)}, ":new_version": {"N": str(new_version)}, ":existing_version": {"N": str(existing_version)}}  

ddb_conn.update_item(table_name, key, update_expression=update_expression, condition_expression=condition_expression, expression_attribute_names=expression_attribute_names, expression_attribute_values=expression_attribute_values)
于 2015-06-13T19:47:28.070 に答える