TypeError: требуется байтоподобный объект, а не 'str' Python 3 загрузка длинного файла - PullRequest
0 голосов
/ 02 марта 2020

Я пытаюсь загрузить файл в формате BLOB с Python 3, этот файл очень «тяжелый» для базы данных. Кто-то может помочь мне с моим кодом:

fout = open('D:\files.zip','wb')
def readBLOB ():
   try:
        conn = mysql.connector.connect(host='(IP)',user='(user)', passwd='(password)', db='(Database)', port=PORT)
        cursor = conn.cursor()
        sql_fetch_blob_query = "SELECT archivo FROM versiones_archivos order by id desc limit 1"
        cursor.execute (sql_fetch_blob_query)
        fout.write(cursor.fetchone()[0])
        fout.close()

    finally:
        if (conn.is_connected()):
            cursor.close()
            conn.close()
readBLOB()

Я получаю следующую ошибку:

TypeError: a bytes-like object is required, not 'str'

Любой специалист по python, который может помочь мне решить или предложить другую альтернативу мой сценарий я бы очень признателен

1 Ответ

1 голос
/ 02 марта 2020

Очевидно, cursor.fetchone()[0] является строкой, но вы открыли свой файл как 'wb' (запись Двоичный или Байт ), поэтому вы не можете записать строку в это - только bytes (точнее, "байтовоподобные объекты", как говорится в сообщении об ошибке).

Вы должны закодировать строку, чтобы получить байты:

try:
   ...
   fout.write(cursor.fetchone()[0].encode())
finally:
   ...
   # don't forget to close the file even if there's an error
   fout.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...