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
由于这是伟大的。作为后续问题,如果属性(不是分区或排序键)大于x且小于y,我想筛选查询。尝试此操作时出现以下错误,并尝试了一堆不同的替代方法,但没有运气:'无效的FilterExpression:操作符或函数的操作数类型不正确;运算符或函数:> =,操作数类型:M:'我的FilterExpression和ExpressionAttributeValues如下:'FilterExpression ='ATTRIBUTE> =:x AND ATTRIBUTE listentoreason
您正尝试在地图属性上使用这些运算符,这就是为什么您会收到此错误。这应该工作'ExpressionAttributeValues = {':x':100,':y':1000}' – ozbey
非常感谢您的帮助 - 我已经启动并运行了很多关于DynamoDB查询的知识。再次感谢。 – listentoreason