在dynamoDB查询中使用字符串作为FilterExpression的参数

时间:2018-09-27 19:58:09

标签: python amazon-web-services amazon-dynamodb

我在python中有以下字符串:

object SemiGroupImplicitTypes {
    implicit object IntSemiGroup extends SemiGroupNumber[Int]
    implicit object LongSemiGroup extends SemiGroupNumber[Long]
    implicit object DoubleSemiGroup extends SemiGroupNumber[Double]
    implicit object FloatSemiGroup extends SemiGroupNumber[Float]

    implicit def listSemiGroup[T]: Semigroup[List[T]] = new SemiGroupList[T]
}

并且我正在尝试使用fe = "Attr('COLOR').eq('RED')" 查询dynamoDB表,这就是我所说的:

FilterExpression

但是我得到了:

response = table.query(KeyConditionExpression=Key('key').eq(key),
                       FilterExpression=fe        
)

是否可以将字符串作为参数进行An error occurred (ValidationException) when calling the Query operation: Invalid FilterExpression: Syntax error; token: "'", near: "('COLOR" 查询?它需要作为字符串输入,因为它由字典提供。我试过剥离引号,例如:

FilterExpression

但是它没有用。关于下一步我可以尝试的任何想法?谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您不能为FilterExpression传递字符串,但是可以使用eval()获得想要的Python表达式。

fe = "Attr('COLOR').eq('RED')"
key = 'myKey'
response = table.query(KeyConditionExpression=Key('key').eq(key),
                       FilterExpression=eval(fe))

当然,在使用eval()时,您需要真的信任您的输入。