2017-10-13 83 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(點)

點(字典的列表,每個字典 表示的點) - 點的列表被寫入數據庫中的