mysql .connector не позволяет мне загружать сжатые данные gzip в базу данных - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь сжать файл в Python, загрузить эти данные в базу данных MySQL, а затем загрузить / распаковать в C#. Вот как я сжимаю файл:

from gzip import GzipFile
from io  import BytesIO

def gzip_str(data):
   sio = BytesIO()
   with GzipFile(fileobj=sio, mode='wb') as gzip:
       gzip.write(data)

       return sio.getvalue()        

И затем файл загружается в базу данных, делая что-то похожее на:

import mysql.connector as mysql

cnx = mysql.connect(**config)
cursor = cnx.cursor()

data = gzip_str( open("filepath.csv", "rb").read() )

cursor.execute("INSERT INTO table (data) VALUES (%s)", (data))
cnx.commit()

Я получаю сообщение об ошибке DatabaseError: Invalid utf8mb4 character string: '8B0800' . Заголовок сжатых данных gzip начинается с \x8b\x08\x00&, поэтому кажется, что он не распознается как допустимый символ utf8mb4. Есть ли способ обойти это? Мне нужен этот заголовок без изменений, чтобы он правильно распаковался. Столбец data имеет тип LONGBLOB, поэтому я даже не уверен, почему его все равно нужно кодировать, разве я не должен просто хранить байтовые данные?

...