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 上解决此问题。
MariaDB Connector/Python 默认设置为 utf8mb4,不接受其他字符集。
由于结果是二进制对象,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')
我正在使用 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 上解决此问题。
MariaDB Connector/Python 默认设置为 utf8mb4,不接受其他字符集。
由于结果是二进制对象,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')