Я пытаюсь вставить много больших двоичных объектов (от 2 до 20 МБ каждый) в Oracle 12 с помощью cx_Oracle 6.3.
После долгих поисков и поисков я получил следующий код.Я новичок в Python и хотел бы знать: действителен ли подход?Есть ли более быстрый способ?
#!/usr/local/bin/python3
import io
import os
import cx_Oracle
pdf = open('hello.pdf', 'rb')
mem_file = io.BytesIO(pdf.read())
mem_file.seek(0, os.SEEK_END)
file_size = mem_file.tell()
con = cx_Oracle.connect("user", "***", "localhost:1512/ORCLPDB1", encoding="UTF-8")
# create table for this example
con.cursor().execute("CREATE TABLE t (id NUMBER, b BLOB) LOB(b) STORE AS SECUREFILE(COMPRESS)");
# prepare cursor
cursor = con.cursor()
my_blob = cursor.var(cx_Oracle.BLOB, file_size)
my_blob.setvalue(0, mem_file.getvalue())
# execute insert
cursor.execute("INSERT INTO t(id, b) VALUES (:my_id, :my_blob)", (1, my_blob))
con.commit()
con.close()
Как насчет вставки EMPTY_BLOB()
и выполнения UPDATE
позже?Нужно ли / полезно ли вычислять размер BLOB до вставки?