DynamoDB查询FilterExpression多条件链Python

问题描述:

我正在尝试基于用户提供的特定属性参数(我们称之为'ATTRIBUTE1')以编程方式在Python中为DynamoDB查询创建FilterExpression。DynamoDB查询FilterExpression多条件链Python

我需要筛选的所有用户提供的参数都在列表中。例如:['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')

我还没能找到解决办法,并希望得到任何指导。提前致谢。以字符串形式和ExpressionAttributeValues FilterExpression的

组合可以正常工作,考虑下面的例子:

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

+0

由于这是伟大的。作为后续问题,如果属性(不是分区或排序键)大于x且小于y,我想筛选查询。尝试此操作时出现以下错误,并尝试了一堆不同的替代方法,但没有运气:'无效的FilterExpression:操作符或函数的操作数类型不正确;运算符或函数:> =,操作数类型:M:'我的FilterExpression和ExpressionAttributeValues如下:'FilterExpression ='ATTRIBUTE> =:x AND ATTRIBUTE listentoreason

+0

您正尝试在地图属性上使用这些运算符,这就是为什么您会收到此错误。这应该工作'ExpressionAttributeValues = {':x':100,':y':1000}' – ozbey

+0

非常感谢您的帮助 - 我已经启动并运行了很多关于DynamoDB查询的知识。再次感谢。 – listentoreason