1

我正在尝试使用以下代码使用 influxdb-python 将 json(见下文)写入 influxDB -

DBclient = client(host, port, user, password, dbname) 
influx_data = json.dumps(write_to_influx_json)
print influx_data
# Writing Data in Influx
DBclient.write_points(influx_data)

JSON -

    [{
    "fields": [{
        "PATH": "/",
        "DISK_USED_PERCENT": "10"
    }, {
        "PATH": "/xxxxxxxxx",
        "DISK_USED_PERCENT": "0"
    }, {
        "PATH": "/dev/xxxxxxxxx",
        "DISK_USED_PERCENT": "0"
    }, {
        "PATH": "/xxxxxxxxx",
        "DISK_USED_PERCENT": "3"
    }, {
        "PATH": "/sys/xxxxxxxxx/xxxxxxxxx",
        "DISK_USED_PERCENT": "0"
    }, {
        "PATH": "/run/xxxxxxxxx",
        "DISK_USED_PERCENT": "0"
    }, {
        "PATH": "xxxxxxxxx",
        "DISK_USED_PERCENT": "0"
    }],
    "tags": {
        "host_identifier": "xxxxxx",
        "name": "mount_point_percentage"
    },
    "time": "xxxxx",
    "measurement": "xxxxxxx"
  }]

但我不断收到以下错误 -

AttributeError: 'str' object has no attribute 'get'

有人可以指出我正确的方向。

4

3 回答 3

0

您似乎没有正确调用 write_points() 。文档似乎表明您需要提供更多信息 。write_points(points, time_precision=None, database=None, retention_policy=None, tags=None, batch_size=None, protocol=u'json') 参数:

points (字典列表,每个字典代表一个点) -- 要写入数据库的点列表

time_precision (str) – s,或m,默认为 Nonemsu

database (str) -- 要将点写入的数据库。默认为客户端的当前数据库

tags (dict) -- 与每个点关联的一组键值对。键和值都必须是字符串。这些是共享标签,将与特定于点的标签合并,默认为无

retention_policy (str) -- 点的保留策略。默认为无

batch_size (int) – 分批写入点的值,而不是一次全部写入。用于将数据从一个数据库转储到另一个数据库或进行大量写入操作时,默认为 None

protocol (str) -- 写入数据的协议。要么line要么json

于 2017-10-13T15:57:03.193 回答
0
influx_data = json.dumps(write_to_influx_json)

数据需要是字典列表,而不是 json。

请参阅文档

write_points(点)

points (字典列表,每个字典代表一个点) -- 要写入数据库的点列表

于 2017-10-20T13:40:44.627 回答
0

您的代码中有两个问题。

首先,您没有write_points()正确调用(如@Davidgs 和@danny 所说)。文档说明以下内容:

write_points(点)

points (字典列表,每个字典代表一个点) -- 要写入数据库的点列表

在您的代码中,您正在调用DBclient.write_points(influx_data),但参数influx_datastring。该方法期望它是一个字典列表。这可以通过发送 JSON 数据write_to_influx_json而不是influx_data. 所以你的代码应该是这样的:

DBclient.write_points(write_to_influx_json)

第二个问题是 JSON 结构,更具体地说,是fields元素。它应该是字典,而不是列表(如tags元素)。据我所知,您正在尝试发送多个数据点。数据点必须是单独的字典(如文档所述)。因此,您的 JSON 数据结构应如下所示:

[
    {
        "fields": {
            "PATH": "/",
            "DISK_USED_PERCENT": "10"
        },
        "tags": {
            "host_identifier": "xxxxxx",
            "name": "mount_point_percentage"
        },
        "time": "xxxxx",
        "measurement": "xxxxxxx"
    },
    {
        "fields": {
            "PATH": "/xxxxxxxxx",
            "DISK_USED_PERCENT": "0"
        },
        "tags": {
            "host_identifier": "xxxxxx",
            "name": "mount_point_percentage"
        },
        "time": "xxxxx",
        "measurement": "xxxxxxx"
    },
    {
        "fields": {
            "PATH": "/dev/xxxxxxxxx",
            "DISK_USED_PERCENT": "0"
        },
        "tags": {
            "host_identifier": "xxxxxx",
            "name": "mount_point_percentage"
        },
        "time": "xxxxx",
        "measurement": "xxxxxxx"
    },
    {
        "fields": {
            "PATH": "/xxxxxxxxx",
            "DISK_USED_PERCENT": "3"
        },
        "tags": {
            "host_identifier": "xxxxxx",
            "name": "mount_point_percentage"
        },
        "time": "xxxxx",
        "measurement": "xxxxxxx"
    }
]

等等。

这个错误也发生在我的代码中!:)

于 2019-04-24T17:49:56.863 回答