2017-10-13 80 views
0

我试图通过使用下面的代码中使用influxdb的Python写一个JSON(如下图所示)到influxDB -Influxdb Python的write_points错误

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' 

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

回答

0

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

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

time_precision(STR) - 无论是smmsu,默认为无

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

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

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

batch_size(int) - 批量写入点的值,而不是同时写入所有点。在执行从一个数据库到另一个数据库的数据转储或进行大量写入操作时有用,默认设置为无。

协议(str) - 用于写入数据的协议。 linejson

+0

尝试这样 - 'DBclient.write_points (influx_data,time_precision = None,database = None,retention_policy = None,tags = None,batch_size = None,protocol = u'json')',仍然得到相同的异常 –

+0

在Python中,只有非缺省的非关键字参数是需要。这只是上面的“点”。 – danny

0
influx_data = json.dumps(write_to_influx_json) 

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

请参阅docs

write_points(点)

点(字典的列表,每个字典 表示的点) - 点的列表被写入数据库中的