Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert boto3 BaseCondition to its string representation

I am trying to convert boto3 dynamoDB conditional expressions (using types from boto3.dynamodb.conditions) to its string representation. Of course this could be hand coded but naturally I would prefer to be able to find something developed by AWS itself.

Key("name").eq("new_name") & Attr("description").begins_with("new")

would become

"name = 'new_name' and begins_with(description, 'new')"

I have been checking in the boto3 and boto core code but so far no success, but I assume it must exist somewhere in the codebase...

like image 566
Gilles Major Avatar asked Nov 06 '22 11:11

Gilles Major


1 Answers

In the boto3.dynamodb.conditions module there is a class called ConditionExpressionBuilder. You can convert a condition expression to string by doing the following:

condition = Key("name").eq("new_name") & Attr("description").begins_with("new")

builder = ConditionExpressionBuilder()
expression = builder.build_expression(condition, is_key_condition=True)

expression_string = expression.condition_expression
expression_attribute_names = expression.attribute_name_placeholders
expression_attribute_values = expression.attribute_value_placeholders

I'm not sure why this isn't documented anywhere. I just randomly found it looking through the source code at the bottom of this page https://boto3.amazonaws.com/v1/documentation/api/latest/_modules/boto3/dynamodb/conditions.html.

Unfortunately, this doesn't work for the paginator format string notation, but it should work for the Table.query() format.

like image 178
Brian Avatar answered Nov 13 '22 16:11

Brian