如何使用Mysql Python连接器检索二进制数据?

时间:2018-08-02 15:17:31

标签: python mysql

如果我在MySQL中使用二进制数据创建了一个简单表:

CREATE TABLE foo ( bar binary(4) )
INSERT INTO foo (bar) VALUES ( UNHEX('de12') )

然后尝试使用MySQL Connector / Python读取它:

import mysql.connector
conn = mysql.connector.connect(database='test', user='test')
cursor = conn.cursor()
cursor.execute("SELECT * FROM foo")
cursor.fetchall()

我收到此错误:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xde in position 0: invalid continuation byte

我不明白为什么Python MySQL连接器试图将列解码为UTF-8。我只想获取原始二进制数据,该怎么办?

(Python 2.7.10,Mysql 5.7.22,MySQL Connector / Python 8.0.12)

1 个答案:

答案 0 :(得分:0)

使用原始连接(或原始光标)执行提取。

import mysql.connector
conn = mysql.connector.connect(database='test', 
user='test',raw=True)
cursor = conn.cursor()
cursor.execute("SELECT * FROM foo")
cursor.fetchall()

默认情况下,python fetch命令尝试将二进制数据转换为字符串。尝试此操作时,会遇到utf-8编码的字符串中不允许的字节序列。将原始模式设置为True会覆盖此行为,并使结果按原样返回,而不是转换为Python类型。