如何将字节插入Python字符串

时间:2015-09-24 12:53:08

标签: python mysql string types byte

我需要在字符串中插入字节,因为我正在使用marshal Python模块来序列化我的函数(因为我稍后会将它们插入到数据库中)。我需要一些方法来通过MySQL查询传递字节,因为每当我尝试时我得到:

Query += "'" + value + "'"

TypeError: Can't convert 'bytes' object to str implicitly

所以,我需要知道该怎么做才能在我的查询变量中传递它而没有错误。

编辑:因为有人将其标记为副本,我不能简单地将其解码为utf-8,因为它包含utf8不支持的字符

2 个答案:

答案 0 :(得分:1)

如果要将任何字节转换为字符串,则不应使用utf8,而应使用支持256字节的字符集,例如latin1或iso-8859-1。

这是一个小测试:

a = bytes(range(256))
b = a.decode('latin1')
c = b.encode('latin1')
c == a

给出True

因此,对于您的用例,您可以使用:Query += "'" + value.decode('latin1') + "'"

对于参考,a给出

  

B'\ X00 \ X01 \ X02 \ X03 \ X04 \ X05 \ X06 \ X07 \ X08 \吨\ n \ X0B \ X0C \ r \ x0e \ X0F \ X10 \ X11 \ X12 \ X13 \ X14 \ X15 \ x16 \ x17 \ x18 \ x19 \ x1a \ x1b \ x1c \ x1d \ x1e \ x1f!“#$%& \'()* +, - 。/ 0123456789:;< =>?@ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _`abcdefghijklmnopqrstuvwxyz {|}〜\ 0x7F部分\ X80 \ X81 \ X82 \ X83 \ X84 \ X85 \ 86 \的x87 \ X88 \ X89 \ x8a \ x8b \ x8c \ x8d \ x8e \ X8F \ X90 \ X91 \ X92 \ X93 \ X94 \ X95 \ X96 \ X97 \ X98 \ X99 \ x9a \ x9b \ x9c \ x9d \ x9e \ x9f \ XA0 \ XA1 \ XA2 \ XA3 \ XA4 \ xa5 \ xa6 \ XA7 \ xa8版权所有\ xA9 \的Xaa \ XAB \ XAC \ XAD \ XAE \ XAF \ XB0 \ XB1 \ XB2 \ XB3 \ XB4 \ XB5 \ XB6 \ XB7 \ XB8 \ xb9 \ XBA \ XBB \ XBC \ XBD \ XBE \ XBF \ XC0 \ XC1 \ XC2 \ XC3 \ XC4 \ XC5 \ XC6 \ xc7 \ xc8 \ xc9 \ XCA \ XCB \ XCC \ XCD \ XCE \ XCF \ XD0 \ XD1 \ XD2 \ XD3 \ XD4 \ XD5 \ XD6 \ XD7 \ XD8 \ xd9 \ XDA \ XDB \ XDC \ XDD \ XDE \ XDF \ xe0 \ XE1 \ XE2 \ XE3 \ XE4 \ xe5 \ XE6 \ XE7 \ xe8 \ xe9 \ XEA \ XEB \ XEC \固定的\ XEE \ XEF \ XF0 \ XF1 \ XF2 \ XF3 \ XF4 \ XF5 \ XF6 \ XF7 \ XF8 \ xf9 \ XFA \ XFB \ XFC \ XFD \ XFE \ XFF'

和b给出:

  

'\ X00 \ X01 \ X02 \ X03 \ X04 \ X05 \ X06 \ X07 \ X08 \吨\ n \ X0B \ X0C \ r \ x0e \ X0F \ X10 \ X11 \ X12 \ X13 \ X14 \ X15 \ X16 \ x17 \ x18 \ x19 \ x1a \ x1b \ x1c \ x1d \ x1e \ x1f!“#$%& \'()* +, - 。/ 0123456789:;< =>?@ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _`abcdefghijklmnopqrstuvwxyz {|}〜\ 0x7F部分\ X80 \ X81 \ X82 \ X83 \ X84 \ X85 \ 86 \的x87 \ X88 \ X89 \ x8a \ x8b \ x8c \ x8d \ x8e \ X8F \ X90 \ X91 \ X92 \ X93 \ X94 \ X95 \ X96 \ X97 \ X98 \ X99 \ x9a \ x9b \ x9c \ x9d \ x9e \ x9f \xa0¡¢£¤¥|§¨©ª«¬\xad®¯°±²³'μ¶·¸¹º »¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'

答案 1 :(得分:0)

更改

Query += " VALUES("

Query += " VALUES(%s)"

并将其余行删除到Execute。当你调用execute时,就这样做:

self.Execute(Query, (*values))

这使用MySQL模块进行格式化,而不是Python。这对二进制数据来说是必要的。