Python 将Influxdb时序数据写入mysql库时遇到的问题

使用python的 influxdb、pandas、pymysql模块,将influxdb的时序数据,抽取到mysql中。

使用influxdb模块中的DataframeClient初始化一个连接实例,然后通过实例的quey()方法,执行influxQL查询,查询需要的数据,结果集会被自动初始化为一个DataFrame类。但是当各模块版本与数据库版本等匹配不好时,会出现各类异常问题。

本次在执行查询后,结果集初始化为DataFrame类时报错,详细报错如下。

Traceback (most recent call last):
  File "E:\ReportData\import-influxdb-to-mysql.py", line 163, in <module>
    data_proc()
  File "E:\ReportData\import-influxdb-to-mysql.py", line 147, in data_proc
    df = client.query(sql)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\influxdb\_dataframe_client.py", line 202, in query
    return self._to_dataframe(results, dropna,
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\influxdb\_dataframe_client.py", line 222, in _to_dataframe
    df.time = pd.to_datetime(df.time)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\core\tools\datetimes.py", line 1112, in to_datetime
    values = convert_listlike(arg._values, format)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\core\tools\datetimes.py", line 488, in _convert_listlike_datetimes
    return _array_strptime_with_fallback(arg, name, utc, format, exact, errors)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\core\tools\datetimes.py", line 519, in _array_strptime_with_fallback
    result, timezones = array_strptime(arg, fmt, exact=exact, errors=errors, utc=utc)
  File "strptime.pyx", line 534, in pandas._libs.tslibs.strptime.array_strptime
  File "strptime.pyx", line 355, in pandas._libs.tslibs.strptime.array_strptime
ValueError: time data "2024-04-23T06:30:07Z" doesn't match format "%Y-%m-%dT%H:%M:%S.%f%z", at position 473. You might want to try:
    - passing `format` if your strings have a consistent format;
    - passing `format='ISO8601'` if your strings are all ISO8601 but not necessarily in exactly the same format;
    - passing `format='mixed'`, and the format will be inferred for each element individually. You might want to use `dayfirst` alongside this.

最终解决方案:

DataFramClient对象的query()方法中传入参数,指定结果集合 timestamp的格式类型。

client.query(sql,epoch='ns')。

query方法详细解释,可参考 API Documentation — InfluxDB 5.3.1 documentation

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值