Struct() argument 1 must be string, not unicode问题解决

在使用Python2.7.7版本以下连接InfluxDB时遇到query方法异常,原因是struct()方法不支持对unicode数据解析。解决办法是在client.py文件中修改_msgpack_parse_hook方法,将struct.unpack后的参数类型由默认改为字符串,从而避免错误,成功查询InfluxDB数据。
摘要由CSDN通过智能技术生成

原因

解决方法


原因

使用python连接时序库influxdb

在使用代码进行查询influxdb库时调用query()方法异常

经过查询各种资源发现 这是因为python2.7.7版本以下不支持struct()方法进行对unicode数据的解析

,导致influxdb在进行query查询语句时报错

解决方法(不进行升级python版本)

进入所安装的python版本下的client.py文件

因各自的安装路径而异 ,我的路径为

/usr/lib/python2.7/site-packages/influxdb-5.3.1-py2.7.egg/influxdb/client.py

进入该文件后,寻找到_msgpack_parse_hook方法。具体代码内容大致为

def _msgpack_parse_hook(code, data):
    if code == 5:
        (epoch_s, epoch_ns) = struct.unpack(">QI", data)
        timestamp = datetime.datetime.utcfromtimestamp(epoch_s)
        timestamp += datetime.timedelta(microseconds=(epoch_ns / 1000))
        return timestamp.isoformat() + 'Z'
    return msgpack.ExtType(code, data)

将struct.unpack后的方法进行修改,结果为

def _msgpack_parse_hook(code, data):
    if code == 5:
        (epoch_s, epoch_ns) = struct.unpack(str(">QI"), data)
        timestamp = datetime.datetime.utcfromtimestamp(epoch_s)
        timestamp += datetime.timedelta(microseconds=(epoch_ns / 1000))
        return timestamp.isoformat() + 'Z'
    return msgpack.ExtType(code, data)

如此,解决问题!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值