我试图根据用户提供的特定属性参数,以编程方式在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/