【问题标题】:How to insert bytes into a Python string如何将字节插入 Python 字符串
【发布时间】:2023-03-15 07:53:01
【问题描述】:

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

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

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

所以,我需要知道该怎么做才能将它传递到我的查询变量中而不会出错。

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

【问题讨论】:

  • 你使用的是什么 MySQL python 模块?我们可以看到您尝试执行查询的代码行吗?
  • mysql.connector for python 3.4 和i.imgur.com/WDR53UH.png
  • @icecreamscoop 你不能把它解码成包含字符串中字符的编解码器吗?

标签: python mysql string types byte


【解决方案1】:

改变

Query += " VALUES("

Query += " VALUES(%s)"

并将其余的行放到 Execute 上。当你调用执行时,这样做:

self.Execute(Query, (*values))

这使用 MySQL 模块进行格式化,而不是 Python。这是二进制数据所必需的。

【讨论】:

    【解决方案2】:

    如果您想将任何字节转换为字符串,则绝不应使用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\t\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{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\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\xed\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\t\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 {|}~\x7f\x80\x81\x82\x83\x84\x85\x86\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®¯°±²³´µ¶·¸¹º»¼½¾¿ ÀÁÂÃÄÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáââãäåæçèéêëìíîïïðñòóôõö÷øùúûüýþÿ'

    【讨论】:

      猜你喜欢
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多