在下面的代码中,我面临KeyError,尽管我的语法看起来很好。
data = {'id': 20720}
query = '{"query":{"bool":{"must":[{"term":{"status.keyword":"Running"}},{"term":{"id":{id}}}],"filter":[{"term":{"status.keyword":"Running"}}]}}}'
print(query.format(**data))
Traceback (most recent call last):
File ".\demo.py", line 3, in <module>
print(query.format(**data))
KeyError: '"query"'
这里我格式化Elasticsearch查询,我不想使用替换字符串,因为如果data包含更多字段,我必须多次迭代它。
我希望低于输出。{"query":{"bool":{"must":[{"term":{"status.keyword":"Running"}},{"term":{"id":20720}}],"filter":[{"term":{"status.keyword":"Running"}}]}}}
2条答案
按热度按时间lhcgjxsq1#
除了
id
变量周围的花括号外,您需要将花括号加倍n3ipq98p2#
当您在一些文本周围使用单个
{}
并尝试使用format
方法时,它需要包含在{}
中的所有属性。所以如果你看一下查询字符串,找到的第一个{
是围绕查询的,我们只是将id
传递给format方法。它也期待查询,所以这就是为什么你会得到这个错误。要解决这个问题,需要将所有键值 Package 在
{{}}
中,以转义format方法关键字参数。您只需要 Package 那些稍后要用单个{}
替换的值,而所有其他值都应该 Package 在{{}}
周围。以下是固定代码。您将看到以下输出:
{"query":{"bool":{"must":[{"term":{"status.keyword":"Running"}},{"term":{"id":20720}}],"filter": [{"term":{"status.keyword":"Running"}}]}}}