Я действительно сбит с толку относительно того, что я делаю неправильно. Кажется, что запрос, который я делаю к клиенту boto3 Dynamodb, идеален из того, что я могу сказать, но я все еще не получаю никаких результатов, когда я запускаю запрос. Я подозреваю, что это как-то связано с FilterExpression, но я не могу этого понять.
Я использую комбо zappa / flask для создания веб-приложения, и я использую DynamodB в качестве базы данных. Мои учетные данные и разрешения AWS в порядке - я знаю это, потому что могу нормально выполнять более простые запросы. Кроме того, более широкий контекст приложения не имеет отношения к моему вопросу.
Я выполняю следующие команды в контексте объекта:
args = {... see below ...}
self.db = boto3.client('dynamodb')
self.db.query(**args)
Ниже приведен аргумент args, который я отправляю клиенту:
{"TableName": "clients",
"IndexName": "client_id",
"FilterExpression": "#filattr0 < :filattrval0 AND #filattr1 = :filattrval1",
"KeyConditionExpression": "#keyindexattr0 = :keyindexvalue0",
"ExpressionAttributeNames": {
"#filattr0": "time",
"#filattr1": "status",
"#keyindexattr0": "client_id"
},
"ExpressionAttributeValues": {
":filattrval0": {"N": "1542696080"},
":filattrval1": {"S": "pending"},
":keyindexvalue0": {"S": "00000000-0000-0000-000000000000"}
},
"Limit": 100,
"ConsistentRead": false,
"Select": "ALL_ATTRIBUTES"}
Ответ, который я получаю от этого запроса, следующий:
{'Items': [],
'Count': 0,
'ScannedCount': 8,
'ResponseMetadata': {'RequestId': '*blahblahblah*',
'HTTPStatusCode': 200,
'HTTPHeaders': {
'server': 'Server',
'date': 'Tue, 20 Nov 2018 06:41:20 GMT',
'content-type': 'application/x-amz-json-1.0',
'content-length': '39',
'connection': 'keep-alive',
'x-amzn-requestid': '*blahblahblah*',
'x-amz-crc32': '*numbers*'},
'RetryAttempts': 0
}}
Теперь я просматриваю таблицу динамодаба через консоль AWS, и она показывает мне следующий объект в соответствующей таблице. Фактически, когда я создаю этот запрос в табличном представлении консоли DynamodB на веб-сайте AWS, он возвращает следующий объект, поэтому я знаю, что параметры приемлемы для AWS:
# Taken from the JSON view of the item in the database
# I removed the UUIDs just in case...
{
"client_id": "00000000-0000-0000-000000000000",
"modify_date": "1542637150",
"schedule_id": "00000000-0000-0000-000000000000",
"software_version": "0.1",
"status": "pending",
"template_id": "00000000-0000-0000-000000000000",
"time": "1542646800",
"timezone": "PDT"
}
Самое странное, что когда я запускаю запрос, используя следующую переменную args:
{'TableName': 'hmcmSchedule',
'IndexName': 'client_id',
'FilterExpression': '#filattr0 = :filattrval0',
'KeyConditionExpression': '#keyindexattr0 = :keyindexvalue0',
'ExpressionAttributeNames': {
'#filattr0': 'status',
'#keyindexattr0': 'client_id'
},
'ExpressionAttributeValues': {
':filattrval0': {'S': 'pending'},
':keyindexvalue0': {'S': '00000000-0000-0000-000000000000'}
},
'Limit': 100,
'ConsistentRead': False,
'Select': 'ALL_ATTRIBUTES'}
Я получаю следующий ответ из базы данных:
# UUIDs have once again been removed, just in case...
{'Items': [{
'modify_date': {'S': '1542637150'},
'template_id': {'S': '00000000-0000-0000-000000000000'},
'software_version': {'S': '0.1'},
'client_id': {'S': '00000000-0000-0000-000000000000'},
'status': {'S': 'pending'},
'timezone': {'S': 'PDT'},
'time': {'S': '1542646800'},
'schedule_id': {'S': '00000000-0000-0000-000000000000'}
}],
'Count': 1,
'ScannedCount': 8,
'ResponseMetadata': {
'RequestId': '*blahblahblah*',
'HTTPStatusCode': 200,
'HTTPHeaders': {
'server': 'Server',
'date': 'Tue, 20 Nov 2018 07:55:59 GMT',
'content-type': 'application/x-amz-json-1.0',
'content-length': '348',
'connection': 'keep-alive',
'x-amzn-requestid': '*blahblahblah*',
'x-amz-crc32': '1922642857'
},
'RetryAttempts': 0}}
Что в моем FilterExpression препятствует работе? Я изучал его часами и не вижу леса за деревьями. Я внимательно прочитал документацию и думаю, что охватил все.
Буду очень признателен за любую помощь или понимание, которое может предложить любой ...