SQLAlchemy maria Db列编码问题

SQLAlchemy maria Db column encoding problem

我正在使用 SQL Alchemy 从 maradb 数据库中提取 table,如下所示:

engine=db.create_engine('mariadb+mariadbconnector://username:password@127.0.0.1:3306/dbname?charset=utf8mb4')

然后创建连接

connection = engine.connect()

然后我添加一个 select 语句并将 table 放入 pandas 数据框

from sqlalchemy.sql import text
objects = text(''' SELECT * FROM objects 0
INNER JOIN area a ON a.id =o.area_id LIMIT 10;''')
raw = pd.read_sql(objects,connection)

到目前为止一切顺利,但是当我访问数据框时,uuid 列的格式如下

0    b'\x05\xd5\x0b\x80\xf4\x05O\xd3\x9e\x17\x88\xb5p\xca\x8d6'
1                b'Q\xddJ\xd6y\xdeOG\xad\xdc\xbc@\xb5,\xfe\x08'
2            b'z\xde\xb7\xb8\x160O\xc9\x80\x0b\x96\xbaR\x04k\r'
3                b'\xeb\x7f\xb9~\xa8\x0eO\x9f\x87\xea`@\x16)QD'
4             b'\x051\xc1\x81\xbf\xe2O!\xa3AT\xa1\xf7X\x92\xbc'
5                      b'\x1c\x00x\x99\xbbQO\xc9\xbdZ\xccb(K5b'
6                b'DFg\xa7_\xfeO\xe3\x95\x95-u\xd7\xed\x90\xd8'
7         b'\x91\xba\xe0\xe2\x1c\xe7OS\xbbW\x0b\xcd\t\x85V\xf0'
8             b'`\xdb\xd7\xba~\xdeO\xb2\xa5\xcd)\x00\xa5&\xa0,'
9               b'%\x06\xf5<_\xa7O\x08\x9c\x90\n|t\xc8\x95\xdc'

返回数据库并执行相同的查询,我在 uuid 列中得到以下结果

1    Õ  ô OÓ   µpÊ 6
2   QÝJÖyÞOG­Ü¼@µ,þ 
3   zÞ·¸ 0OÉ   ºR k 
4   ë ¹~¨ O  ê`@ )QD
5    1Á ¿âO!£AT¡÷X ¼
6     x »QOɽZÌb(K5b
7   DFg§_þOã  -u×í Ø
8    ºàâ çOS»W Í  Vð
9   `Û׺~ÞO²¥Í) ¥& ,
10  % õ<_§O    |tÈ Ü

我知道我遇到了编码问题,我尝试了如下所示的解码编码

raw.uuid.str.encode('utf-8')

但我卡住了。非常感谢任何指针。关于如何在源上或至少在数据框 lvl 上解决此问题。

  1. MariaDB Connector/Python 默认设置为 utf8mb4,不接受其他字符集。

  2. 由于结果是二进制对象,uuid 存储在 blob(二进制)列中。您需要将其转换为字符串,而不是尝试对其进行编码:

>>>import uuid
    
>>>uuid.UUID(bytes=b'\x05\xd5\x0b\x80\xf4\x05O\xd3\x9e\x17\x88\xb5p\xca\x8d6')
UUID('05d50b80-f405-4fd3-9e17-88b570ca8d36')