Vous pouvez faire quelque chose de beaucoup plus simple qui sera également beaucoup plus rapide. Notez que cette approche ne fonctionne que lorsque vous êtes capable de stocker l'intégralité du contenu du fichier dans une mémoire contiguë et que la limite stricte actuelle est de 1 Go, même si vous disposez de plusieurs téraoctets de RAM !
cursor.execute("insert into t (id, b) values (:my_id, :my_blob)",
(1, mem_file.getvalue())
Insérer une valeur empty_blob() et renvoyer le localisateur LOB pour une mise à jour ultérieure est plus rapide que de créer un LOB temporaire et de l'insérer (comme vous le faites dans votre code), mais insérer les données directement est encore plus rapide !