【问题标题】:Python influxdb timestamp valueerrorPython influxdb 时间戳值错误
【发布时间】:2023-11-28 16:34:01
【问题描述】:

我正在尝试使用 write_points() 将数据添加到 python 中的 influxdb 数据库。但是,write_points 的时间戳部分出现错误。我尝试过多种方式定义时间戳,首先使用

info = line.split()
s_time = info[2]
i_time = "20" + s_time[6:8] + "-" + s_time[0:2] + "-" + s_time[3:5] + ' ' + s_time[9:]
fixedtime = datetime.datetime.strptime(i_time, "%Y-%m-%d %H:%M:%S")

并将时间与 influxdb 所需的所有其他部分一起添加到 JSON 我还尝试将时间戳设为 int

inttime = int(time.time()*1000);

这给了我纪元时间。 这两个时间戳都会从我的代码中的这一行引发值错误

dbclient.write_points(db_point, time_precision='ms', protocol='json')

的最后一行
    if isinstance(timestamp, Integral):
        return timestamp  # assume precision is correct if timestamp is int
    if isinstance(_get_unicode(timestamp), text_type):
        timestamp = parse(timestamp)
    if isinstance(timestamp, datetime):
        if not timestamp.tzinfo:
            timestamp = UTC.localize(timestamp)
        ns = (timestamp - EPOCH).total_seconds() * 1e9
        if precision is None or precision == 'n':
            return ns
        elif precision == 'u':
            return ns / 1e3
        elif precision == 'ms':
            return ns / 1e6
        elif precision == 's':
            return ns / 1e9
        elif precision == 'm':
            return ns / 1e9 / 60
        elif precision == 'h':
            return ns / 1e9 / 3600
    raise ValueError(timestamp)

在line_protocol.py中

当我使用纪元时间时,整数会以某种方式转换为一个集合,因此它不会传递任何 if 语句,但我不知道为什么字符串会通过其中一个 if 语句

【问题讨论】:

    标签: python database timestamp influxdb valueerror


    【解决方案1】:

    JSON 协议支持 FAQ says RFC3339 和 RFC3339Nano。它的格式(as implemented in the Go)类似于“2006-01-02T15:04:05Z07:00”(注意“T”),或者直接使用datetime.datetime.isoformat

    【讨论】: