【问题标题】:How to insert/store a string value in influxdb measurement?如何在 influxdb 测量中插入/存储字符串值?
【发布时间】:2017-11-13 21:10:26
【问题描述】:

我正在尝试在 influx db 中插入一些字符串值,但不断收到 400 错误。我正在使用 python 请求模块连接到 influxdb。这是我的代码:

description = '"' + some_str + '"'
payload = "%s, name=%s, description=%s, count=%d %d" %(measurement, name, description,count,timestamp)
requests.post(influx_uri, data=payload, headers= headers)

我不断收到此错误:

400 {"error":"unable to parse 'sample,name=sample, description=\"some_str\", count=1 15106068120000000' : missing tag key"}

我不知道这是如何生成的 description=\"some_str\"

【问题讨论】:

  • 这对您有帮助吗:github.com/influxdata/influxdb/issues/3600?不是直接的答案,而是类似的。
  • 我已经检查过了,如果我去掉描述字段,它会很好地找到。无论如何谢谢@Grzegorg
  • sample是度量,相当于关系数据库中的表

标签: python python-requests influxdb


【解决方案1】:

好的。又一次尝试。

reading the docs 没有提到在长字符串周围加上引号。相反,他们说你应该用反斜杠转义空格:

转义字符

如果标签键、标签值或字段键包含空格、逗号、或 等号 = 必须使用反斜杠字符对其进行转义。 反斜杠字符不需要转义。逗号和空格 测量时也需要转义,尽管等号 = 不要。

此外,逗号后不应有空格。所以我建议你试试:

description = "some\ str"
payload = "%s,name=%s,description=%s,count=%d %d" % (measurement, name, description,count,timestamp)

【讨论】:

  • 我将您的答案标记为正确,但需要进行一些更改才能使其正常工作。标签之间不应该有空格,因为它会在引入字符串时抛出标签错误。有效负载 = "%s,name=%s,description=%s count=%d %d" %(测量值、名称、描述、计数、时间戳)
  • some_str= some_str.replace(" ", "\ ")
【解决方案2】:

我没用过influxdb,说实话还是第一次听说,但是……

通过查看docs,他们似乎使用 POST 方法将 JSON 内容发布到 url,例如:

curl -X POST -d '[{"name":"foo","columns":["val"],"points":[[23]]}]' 'http://localhost:8086/db/mydb/series?u=root&p=root'

您的行看起来不像 JSON 文档。你最好做到。不确定你的结构是什么,但也许这可以完成这项工作?

payload = """{"name":"%s", "description":"%s", "count":"%d %d"}""" %(name, description, count, timestamp)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-10-26
  • 2017-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多