将 boto3 BaseCondition 转换为其字符串表示形式

Gil*_*jor 9 python amazon-dynamodb boto3

我正在尝试将 boto3 dynamodb 条件表达式(使用 boto3.dynamodb.conditions 中的类型)转换为其字符串表示形式。当然,这可以手动编码,但我自然更希望能够找到 AWS 自己开发的东西。

Key("name").eq("new_name") & Attr("description").begins_with("new")
Run Code Online (Sandbox Code Playgroud)

会成为

"name = 'new_name' and begins_with(description, 'new')"
Run Code Online (Sandbox Code Playgroud)

我一直在检查 boto3 和 boto 核心代码,但到目前为止没有成功,但我认为它一定存在于代码库中的某个地方......

Bri*_*ian 9

模块中boto3.dynamodb.conditions有一个名为 的类ConditionExpressionBuilder。您可以通过执行以下操作将条件表达式转换为字符串:

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
Run Code Online (Sandbox Code Playgroud)

我不知道为什么这没有记录在任何地方。我只是在浏览本页底部的源代码时随机发现它https://boto3.amazonaws.com/v1/documentation/api/latest/_modules/boto3/dynamodb/conditions.html

不幸的是,这不适用于分页器格式字符串表示法,但它应该适用于该Table.query()格式。