TypeError: unhashable type: 'bytearray'

遇到标题的错误是在程序执行sql之后,查回来的结果是下面这个样子

[{u'max(t_time)': bytearray(b'2018-09-09 15:52:26'), u'name': bytearray(b'ctions'), u'value': bytearray(b'100')}, {u'max(t_time)': bytearray(b'2018-09-09 15:52:26'), u'name': bytearray(b'concurrency'), u'value': bytearray(b'2')}]

结果中出现了 bytearray,程序里不好处理,所以这不是我想要的结果,而我的数据库里查看了这个表的创建语句,如下:

CREATE TABLE `variable` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `instance_id` int(11) NOT NULL,
  `variable_id` int(11) DEFAULT NULL,
  `value` varchar(200) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `insert_time` varchar(45) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`id`),
  KEY `instance_id_idx` (`instance_id`),
  KEY `variable_id_idx` (`variable_id`),
  KEY `insert_time_idx` (`insert_time`)
) ENGINE=InnoDB AUTO_INCREMENT=91716813 DEFAULT CHARSET=utf8;

可以看到 valueinsert_time 字段都使用的是utf8_bin 类型的,这是二进制的存储类型,所以sql查询完之后,返回的结果就是bytearray 的类型。

解决的方法是:去数据库里,把这两个字段都改成utf8_genera_ci 类型就可以了。

在mysql中存在着各种utf8编码格式,以及区分作用:
1)utf8_bin
2)utf8_general_ci
3)utf8_general_cs
utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写。
utf8_genera_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感。
utf8_general_cs区分大小写,cs为case sensitive的缩写,即大小写敏感。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TypeError: unhashable type: 'Position'通常是由于在使用字典时,将不可哈希的对象作为键而导致的错误。在Python中,可哈希的对象是指那些不可变的对象,例如整数、浮点数、字符串、元组等。而不可哈希的对象则是指那些可变的对象,例如列表、字典、集合等。因此,如果我们将一个不可哈希的对象作为字典的键,就会出现TypeError: unhashable type: 'xxx'的错误。 下面是一个例子,演示了如何使用自定义类作为字典的键,从而导致TypeError: unhashable type: 'Position'的错误: ```python class Position: def __init__(self, x, y): self.x = x self.y = y p = Position(1, 2) d = {p: 'test'} # 将Position对象作为字典的键 ``` 在上面的例子中,我们定义了一个Position类,该类包含x和y两个属性。然后我们创建了一个Position对象p,并将其作为字典d的键。由于Position对象是不可哈希的,因此当我们运行上面的代码时,就会出现TypeError: unhashable type: 'Position'的错误。 为了解决这个问题,我们可以将Position类变为可哈希的,方法是实现__hash__()和__eq__()方法。下面是一个修改后的例子: ```python class Position: def __init__(self, x, y): self.x = x self.y = y def __hash__(self): return hash((self.x, self.y)) def __eq__(self, other): return self.x == other.x and self.y == other.y p = Position(1, 2) d = {p: 'test'} # 将Position对象作为字典的键 ``` 在上面的例子中,我们实现了__hash__()和__eq__()方法,使得Position对象变为可哈希的。这样,当我们将Position对象作为字典的键时,就不会出现TypeError: unhashable type: 'Position'的错误了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值