Самая большая проблема в том, что вы пытаетесь сохранить двоичный файл в виде строки, вызывая str (ba.data).Если вы сделаете это, то это не будет действительной строкой, и позже вы будете страдать бесконечно.За кулисами SQLite использует Unicode для всех строк.Однако он не проверяет, является ли указанная строка действительным Unicode (UTF8 / 16).Следовательно, вы можете вставить двоичный мусор, притворяясь, что это строка, но при попытке получить его не получится, поскольку он не преобразуется в Unicode.
SQLite имеет двоичный тип (с именем BLOB), и это именно то, что выследует использовать.Способ предоставления привязки двоичного файла или блоба зависит от используемой оболочки SQLite.Похоже, вы используете PySQLite или SQLite 3. Для Python 2 используйте буфер, а для Python 3 - байты.
# Python 2
params=( buffer(ba.data()), ...)
# Python 3
params=( bytes(ba.data()), ...)