Итерация по списку диктов для создания нескольких записей в DynamodB создает один, а затем останавливается - PullRequest
0 голосов
/ 04 октября 2019

Я практикуюсь с локальным экземпляром DynamodB, получаю элементы из тестового экземпляра и помещаю объекты json обратно в мою локальную таблицу.

Например, запрос идентификатора в качестве первичного ключа дает мнеОтвет «Предметы» со списком из четырех диктовок (подтверждено четыре записи в тестовой БД):

def getRecordsById(id, table):

    response = table.query(
        KeyConditionExpression=Key('recordId').eq(id)
    )
    return response

ответ:

{'Items': [{'processId': 'a1',
   'recommendation': {'value': Decimal('0'),
    'processor': 'John Doe'},
   'createDate': '2019-02-27T18:53:16.380Z',
   'status': 'rejected',
   'recordId': '5',
   'createdBy': 'Buddy',
   'actions': [{'actor': 'Buddy',
     'actionType': 'review',
     'note': '444551233344',
     'actorName': 'Buddy',
     'createDate': '2019-02-27T18:53:16.380Z'},
    {'actor': 'Johnny',
     'actionType': 'reject',
     'note': '234',
     'actorName': 'Johnny',
     'createDate': '2019-02-27T19:00:46.425Z'}],
   'type': 'adjusted'},
  {'processId': 'a2',
   'recommendation': {'value': Decimal('0'),
    'processor': 'John Doe'},
   'createDate': '2019-02-27T18:53:16.380Z',
   'status': 'rejected',
   'recordId': '5',
   'createdBy': 'Buddy',
   'actions': [{'actor': 'Buddy',
     'actionType': 'review',
     'note': '444551233344',
     'actorName': 'Buddy',
     'createDate': '2019-02-27T18:53:16.380Z'},
    {'actor': 'Johnny',
     'actionType': 'reject',
     'note': '234',
     'actorName': 'Johnny',
     'createDate': '2019-02-27T19:00:46.425Z'}],
   'type': 'adjusted'},
  {'processId': 'a3',
   'recommendation': {'value': Decimal('0'),
    'processor': 'John Doe'},
   'createDate': '2019-02-27T18:53:16.380Z',
   'status': 'rejected',
   'recordId': '5',
   'createdBy': 'Buddy',
   'actions': [{'actor': 'Buddy',
     'actionType': 'review',
     'note': '444551233344',
     'actorName': 'Buddy',
     'createDate': '2019-02-27T18:53:16.380Z'},
    {'actor': 'Johnny',
     'actionType': 'reject',
     'note': '234',
     'actorName': 'Johnny',
     'createDate': '2019-02-27T19:00:46.425Z'}],
   'type': 'adjusted'},
  {'processId': 'a4',
   'recommendation': {'value': Decimal('0'),
    'processor': 'John Doe'},
   'createDate': '2019-02-27T18:53:16.380Z',
   'status': 'rejected',
   'recordId': '5',
   'createdBy': 'Buddy',
   'actions': [{'actor': 'Buddy',
     'actionType': 'review',
     'note': '444551233344',
     'actorName': 'Buddy',
     'createDate': '2019-02-27T18:53:16.380Z'},
    {'actor': 'Johnny',
     'actionType': 'reject',
     'note': '234',
     'actorName': 'Johnny',
     'createDate': '2019-02-27T19:00:46.425Z'}],
   'type': 'adjusted'}],
 'Count': 4,
 'ScannedCount': 4,
 'ResponseMetadata': {'RequestId': '4LI4AVRIAQ',
  'HTTPStatusCode': 200,
  'HTTPHeaders': {'server': 'Server',
   'date': 'Thu, 03 Oct 2019 19:45:59 GMT',
   'content-type': 'application/x-amz-json-1.0',
   'content-length': '13934',
   'connection': 'keep-alive',
   'x-amzn-requestid': '4LI4AVR',
   'x-amz-crc32': '4101956423'},
  'RetryAttempts': 0}}

Затем я обрезаю это, чтобы быть просто спискомdicts:

trimmed = blurb_from_test["Items"]

Затем я повторяю это с помощью put_item:

for i in range(len(trimmed)):
    table_local.put_item(
        Item=trimmed[i]
    )

Но я получаю только одну запись (используя тот же самый метод getRecordsById, описанный выше):

{'Items': [{'processId': 'a4',
   'recommendation': {'value': Decimal('0'),
    'processor': 'John Doe'},
   'createDate': '2019-02-27T18:53:16.380Z',
   'status': 'rejected',
   'recordId': '5',
   'createdBy': 'Buddy',
   'actions': [{'actor': 'Buddy',
     'actionType': 'review',
     'note': '444551233344',
     'actorName': 'Buddy',
     'createDate': '2019-02-27T18:53:16.380Z'},
    {'actor': 'Johnny',
     'actionType': 'reject',
     'note': '234',
     'actorName': 'Johnny',
     'createDate': '2019-02-27T19:00:46.425Z'}],
   'type': 'adjusted'}]
 'Count': 1,
 'ScannedCount': 1,
 'ResponseMetadata': {'RequestId': 'ced4a02e-f878-4edf-843a-2aabfadb0133',
  'HTTPStatusCode': 200,
  'HTTPHeaders': {'content-type': 'application/x-amz-json-1.0',
   'x-amz-crc32': '4260213483',
   'x-amzn-requestid': 'ced4a02e-f878-4edf-843a-2aabfadb0133',
   'content-length': '3360',
   'server': 'Jetty(8.1.12.v20130726)'},
  'RetryAttempts': 0}}

Я предполагаю, что я не использую итерацию правильно с put_item, но я не смог найти никаких причин, почему.

1 Ответ

0 голосов
/ 04 октября 2019

Вы можете выполнить итерацию следующим образом:

for item in response.get('Items'):
    print(item)

, где оператор печати может быть изменен для вашей цели, то есть

for item in response.get('Items'):
    table_local.put_item(
        Item=item
    )
...