美文网首页
详解python插入influxdb数据的时间戳问题

详解python插入influxdb数据的时间戳问题

作者: 印随2018 | 来源:发表于2019-02-12 19:34 被阅读39次

焦点:InfluxDB-Python

前段时间,需要往influxdb插入数据,就使用了InfluxDB-Python这个包,下面是使用示例

$ python

>>> from influxdb import InfluxDBClient

>>> json_body = [
    {
        "measurement": "cpu_load_short",
        "tags": {
            "host": "server01",
            "region": "us-west"
        },
        "time": "2009-11-10T23:00:00Z",
        "fields": {
            "value": 0.64
        }
    }
]

>>> client = InfluxDBClient('localhost', 8086, 'root', 'root', 'example')

>>> client.create_database('example')

>>> client.write_points(json_body)

>>> result = client.query('select value from cpu_load_short;')

>>> print("Result: {0}".format(result))

这里其实有个比较隐晦的问题,关于time字段。当time字段为日期+时间的字符串的时候,一定要手动转换为UTC时间,这样插入influxdb的时间才是本地时间。

我抽取了InfluxDB-Python的相关代码,编写了一个测试脚本

gmu@DataDashboard:~$ cat t.py
#!/usr/bin/python3


import os

from pytz import UTC
from dateutil.parser import parse

from datetime import datetime

EPOCH = UTC.localize(datetime.utcfromtimestamp(0))

t = "2019-02-12T15:44:51Z"
print(t)
timestamp = parse(t)
if not timestamp.tzinfo:
    print("XXX")
    timestamp = UTC.localize(timestamp)
s = (timestamp - EPOCH).total_seconds()

os.system('date -d @' + str(int(s)) + ' "+%Y-%m-%dT%H:%M:%SZ"')

脚本的输出

gmu@DataDashboard:~$ ./t.py
2019-02-12T15:44:51Z
2019-02-12T23:44:51Z

从结果可以看出,python时间转换前后差了8个小时。最根本的原因是下面一句代码。

EPOCH = UTC.localize(datetime.utcfromtimestamp(0))

代码默认你输入的time的值是utc时间。

相关文章

网友评论

      本文标题:详解python插入influxdb数据的时间戳问题

      本文链接:https://www.haomeiwen.com/subject/mxzkeqtx.html