将python2版本的SSDB api迁移到python3环境后的访问问题

生产环境使用SSDB数据库,查询起来不是非常方便,因此通过SSDB访问库将常用的查询修改动作集成到了一个python2脚本上。

近期生产环境不再支持python2,因此脚本也需要随之迁移环境。将语法修改完成之后,在连接数据库实例时,一直会异常崩溃,并产生一个位置不明确的错误信息:

a bytes-like object is required, not 'str'

业务代码仅仅进行的实例初始化和auth鉴权:

def connection(host, port):
    # ssdb Client connection
    ssdb = SSDB(host, port)
    ssdb.request(
        'auth', ['**************************'])
    return ssdb

在逐步调试过程中,发现ssdb可以正常初始化,socket也能正常建立,但是在request处会产生崩溃,最后定位到此:

ret = this.sock.send(s)

根据之前的逻辑,此处的s应该是字符串变量。而python3中,sock需要的是bytes类型。遂在此处进行了一次编码后,再将数据传给sock进行发送:

s = s.encode('utf-8')

问题解决!

此外,接收包的时候也会有同样的问题,即sock接受到的数据为bytes类型,需要进行decode解码成str类型,才能进行字符串操作

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值