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
influx_data = json.dumps(write_to_influx_json)

データは、json ではなく、辞書のリストである必要があります。

ドキュメントを参照してください。

write_points(ポイント)

points (辞書のリスト、各辞書はポイントを表します) – データベースに書き込まれるポイントのリスト

于 2017-10-20T13:40:44.627 に答える
0

コードには 2 つの問題があります。

まず、write_points()正しく呼び出していません (@Davidgs や @danny が言ったように)。ドキュメントには次のように記載されています。

write_points(ポイント)

points (辞書のリスト、各辞書はポイントを表します) – データベースに書き込まれるポイントのリスト

コードでは、 を呼び出してDBclient.write_points(influx_data)いますが、引数influx_datastringです。このメソッドは、それが辞書のリストであることを期待しています。write_to_influx_jsonこれは、の代わりにJSON データを送信することで解決できますinflux_data。したがって、コードは次のようになります。

DBclient.write_points(write_to_influx_json)

2 つ目の問題は、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 に答える