TypeError: unhashable type: 'bytearray'

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dqchouyang/article/details/82596909

遇到标题的错误是在程序执行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的缩写,即大小写敏感。

猜你喜欢

转载自blog.csdn.net/dqchouyang/article/details/82596909