Du kan göra något mycket enklare som också kommer att vara betydligt snabbare. Observera att detta tillvägagångssätt bara fungerar när du kan lagra hela filinnehållet i angränsande minne och den nuvarande hårda gränsen är 1 GB, även om du har många terabyte RAM tillgängligt!
cursor.execute("insert into t (id, b) values (:my_id, :my_blob)",
(1, mem_file.getvalue())
Att infoga ett empty_blob()-värde och returnera LOB-lokaliseraren för senare uppdatering är snabbare än att skapa en tillfällig LOB och infoga den (som du gör i din kod) men att infoga data direkt är ännu snabbare!