Как сканировать значения с двоеточием ":" из таблицы Dynamodb? - PullRequest
1 голос
/ 28 апреля 2020

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

Сначала я попытался выполнить сканирование без успеха:

text = 'city:barcelona'
filter_expr = Attr('timestamp').between('2020-04-01', '2020-04-27')
filter_expr = filter_expr & Attr('text').eq(text)
table.scan(FilterExpression = filter_expr, Limit = 1000)

Затем я обратите внимание, что для переменной text, которая не содержит ":", сканирование работает. Итак, я попробовал это второе сканирование, используя ExpressionAttributeNames и ExpressionAttributeValues ​​

table.scan(
            FilterExpression = "#n0 between :v0 AND :v1 AND #n1 = :v2",
            ExpressionAttributeNames = {'#n0': 'timestamp', '#n1': 'text'},
            ExpressionAttributeValues = {
                ':v0': '2020-04-01', 
                ':v1': '2020-04-27', 
                ':v2': {"S": text}},
            Limit = 1000
            )

Не удалось снова.

В конце, если я изменю в первом примере:

  • text = 'barcelona'
  • filter_expr = filter_expr & Attr('text').contains(text)

Я могу получить записи. ИМО, понятно, что проблема в ":"

Есть ли другой способ поиска по текстам с символом ":"?

1 Ответ

1 голос
/ 30 апреля 2020

[пишу ответ, чтобы мы могли закрыть вопрос]

Я запустил оба примера, и они работали правильно для меня. Я настроил text и timestamp как строковые поля. Убедитесь, что у вас установлена ​​актуальная библиотека boto3.

Примечание: я изменил ':v2': {"S": text} на ':v2': text, потому что вы используете ресурс уровень сканирование и вы не не нужно указывать тип атрибута низкого уровня (требуется только для клиента уровня сканирования ).

...