У меня есть таблица: AdvgCountries с двумя столбцами a. CountryId (String) (ключ раздела) b. CountryName (String) Sort Key При создании таблицы я создал только ключ раздела, а затем добавил глобальный вторичный индекс с именем индекса как:
CountryName-index
Type : GSI
Partition key : CountryId
Sort Key : CountryName
Я могу получить CountryName
на основе CountryId
, но не удалось получить CountryId на основе CountryName. Основываясь на моем чтении, я обнаружил, что есть варианты сделать это, предоставив indexname
, но я получаю следующую ошибку:
botocore.exceptions.ClientError: произошла ошибка (ValidationException) при вызове запроса операция: условие запроса пропущен ключевой элемент схемы: CountryId
import boto3
import json
import os
from boto3.dynamodb.conditions import Key, Attr
def query_bycountryname(pCountryname, dynamodb=None):
if not dynamodb:
dynamodb = boto3.resource('dynamodb', endpoint_url="https://dynamodb.us-east-1.amazonaws.com")
table = dynamodb.Table('AdvgCountires')
print(f"table")
attributes = table.query(
IndexName="CountryName-index",
KeyConditionExpression=Key('CountryName').eq(pCountryname),
)
if 'Items' in attributes and len(attributes['Items']) == 1:
attributes = attributes['Items'][0]
print(f"before return")
return attributes
if __name__ == '__main__':
CountryName = "India"
print(f"Data for {CountryName}")
countries = query_bycountryname(CountryName)
for country in countries:
print(country['CountryId'], ":", country['CountryName'])
Любая помощь приветствуется.