我试图根据用户提供的特定属性参数,以编程方式在Python中为DynamoDB查询创建FilterExpression(我们将其称为“ATTRIBUTE1”)。

我需要过滤的所有用户提供的参数都在列表中。例如:['Parameter1', 'Parameter2']
然后将采用Attr('ATTRIBUTE1').eq(PARAMETER1)&Attr.('ATTRIBUTE1').eq(PARAMETER2)的形式

如何基于用户提供的参数数量的变化,以编程方式为我的FilterExpression创建Attr,如上?

有时我可能会使用['Parameter1'],而有时我可能会使用['Parameter1', 'Parameter2', 'Parameter3'],需要分别将其转换为Attr('ATTRIBUTE1').eq('Parameter1')Attr('ATTRIBUTE1').eq('Parameter1')&Attr('ATTRIBUTE1').eq('Parameter2')&Attr('ATTRIBUTE1').eq('Parameter3')

我还没有找到解决方案,希望能得到任何指导。提前致谢。

最佳答案

可以将字符串形式的FilterExpression和ExpressionAttributeValues组合使用,请考虑以下示例:

attrs = ["attribute1", "attribute2", "attribute3"]
user_input = ["parameter1", "paramater2", "parameter3"]
ExpressionAttributeValues = {}
FilterExpression = "";
for index, input in enumerate(attrs):
    if(len(attrs)-1 == index): FilterExpression += input+"=:"+input
    else: FilterExpression += input+" = :"+input + " AND ";

for index, input in enumerate(user_input):
    AttrName = ":" + attrs[index]
    ExpressionAttributeValues[AttrName] = {
        "S" : input
    }

print(ExpressionAttributeValues)
print(FilterExpression)

那么您可以在查询中使用这两个,更多信息请参见http://boto3.readthedocs.io/en/latest/reference/services/dynamodb.html#client

关于python - DynamoDB查询FilterExpression多条件链接Python,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46616282/

10-13 05:37