如何使用 mysql.connector 从 MySQL 返回 str?

新手上路,请多包涵

我正在尝试将来自 mysql.com 的 MySQL Connector/Python 与 Python 3 结合使用。

我有 UTF-8 编码的表,当我获取行时,我所有的字符列都像 bytearray 一样返回。这是制造一些混乱。

我如何直接获取 str

更新:

 # -*- coding: utf-8 -*-
import mysql.connector
con = mysql.connector.connect( user ="root", db = "vg_site_db", charset = 'utf8' )
cursor = con.cursor()
sql = """select caption from domains
"""
cursor.execute( sql )
row = cursor.fetchone()
while row is not None:
    print( row )
    row = cursor.fetchone()

输出:

 (bytearray(b'ezsp.ru'),)
(bytearray(b'eazyshop.ru'),)
(bytearray(b'127.0.0.1:8080'),)
(bytearray(b'rmsvet.ru'),)

我想:

 ('ezsp.ru',)
('eazyshop.ru',)
('127.0.0.1:8080',)
('rmsvet.ru',)

更新2:

我的表使用 COLLATE utf8_bin

原文由 Gulaev Valentin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
1 个回答

似乎当您使用二进制排序规则时会发生这种情况,至少我也是如此。要将字节数组转换为 Unicode 字符串,您可以添加自定义转换器类:

 class MyConverter(mysql.connector.conversion.MySQLConverter):

    def row_to_python(self, row, fields):
        row = super(MyConverter, self).row_to_python(row, fields)

        def to_unicode(col):
            if isinstance(col, bytearray):
                return col.decode('utf-8')
            return col

        return[to_unicode(col) for col in row]

sql = mysql.connector.connect(converter_class=MyConverter, host=...)

原文由 danmichaelo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题