Сканирование Dynamodb с логическим типом данных не работает должным образом - PullRequest
0 голосов
/ 25 февраля 2020

, поэтому у меня есть следующий сценарий, где мне нужно сканировать таблицу, и мне нужно запросить столбец, который является логическим, теперь с текущей реализацией я не могу запросить.

я получаю следующую ошибку

Ошибка: у объекта «Attr» нет атрибута «BOOL»

Ниже приведен мой код, который принимает запрос в следующем формате "<columnname><operator><value>", поэтому я выполняю оператор преобразования соответствующей операции из динамо. Пример запроса будет выглядеть так: "Potential_TechLead_Y_N=True"

def query_parser(query):
    query = query.replace('<=', '^')
    query = query.replace('>=', '~')
    query = query.replace('<>', '`')
    query = query.replace('like', '%')
    filter_expression = None
    if query:
        try:
            filters = query.split('&')
            filter_expression = ""
            for filter in filters:
                data = re.split('([=<>^~%`])', filter)

                if "True" in data[2] or "False" in data[2]:
                    data[1] = "BOOL"
                    filter_expression = filter_expression + "Attr('{}').{}('{}') & ".format(data[0], data[1], eval(data[2]))
                else:
                    filter_expression = filter_expression + "Attr('{}').{}('{}') & ".format(data[0], data[1], data[2])
                    # filter_expression = "Boolean ({})".format(eval(data[2]))

            filter_expression = filter_expression.replace('=', 'eq')
            filter_expression = filter_expression.replace('<', 'lt')
            filter_expression = filter_expression.replace('^', 'lte')
            filter_expression = filter_expression.replace('>', 'gt')
            filter_expression = filter_expression.replace('~', 'gte')
            filter_expression = filter_expression.replace('`', 'ne')
            filter_expression = filter_expression.replace('%', 'contains')
            # print(filter_expression)
            filter_expression = filter_expression[:-2]
            print(filter_expression)
            return filter_expression
        except Exception as e:
            print(error_constants.DYNAMO_QUERY_STANDARD_ERROR)
            print('Error: ' + str(e))
            exit(1)
    return filter_expression
...