Массовая вставка в базу данных Oracle через jaydebeapi Python - PullRequest
0 голосов
/ 19 июня 2019

Я хочу массово скопировать данные из файлов SQLite3 в базу данных Oracle и сделать это программно из скрипта Python с использованием модуля jaydebeapi. (Я не контролирую выбор Python + jaydebeapi для этого; это связано с проектом, в котором я сотрудничаю.)

Один из способов сделать это - сбросить таблицы SQLite3 во временные файлы CSV и использовать команду Oracle LOAD DATA INFILE для чтения файлов CSV.

Я ищу способ достижения того же конечного результата, который позволяет избежать создания промежуточных временных файлов.

В частности, поскольку я могу выполнять массовое чтение таблиц SQLite3 в память (с помощью простых операторов SELECT), мне нужен коллега для массовой записи, который выгружает таблицы из памяти в базу данных Oracle.


РЕДАКТИРОВАТЬ: Это повторяющаяся задача. Самая большая таблица, которую нужно скопировать, обычно имеет ~ 100 тыс. Строк.

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Поскольку это две разные «базы данных», вам, скорее всего, понадобится соединение с SQLLite для выполнения запроса и другое соединение с БД Oracle для выполнения вставки.

Когда дело доходит до вставки в базу данных Oracle из приложения Python, вы должны использовать метод executemany() модуля cx_Oracle:

data = [
    (60, "Parent 60"),
    (70, "Parent 70"),
    (80, "Parent 80"),
    (90, "Parent 90"),
    (100, "Parent 100")
]

cursor.executemany("""
        insert into ParentTable (ParentId, Description)
        values (:1, :2)""", data)

См. https://blogs.oracle.com/opal/efficient-and-scalable-batch-statement-execution-in-python-cx_oracle

0 голосов
/ 19 июня 2019

Имеют ли таблицы SQLite3 и Oracle DB одинаковую схему?Если они это сделают, то вы можете попробовать что-то простое, например, эквивалент этого псевдокода

for table in sqlite3tables:
    (SELECT * FROM table)  ->  temptable
    for row in temptable
        INSERT row INTO oracletable

Если разные базы данных имеют разные схемы, вам нужно написать оператор SELECT более адаптированным образом.

В любом случае, чтение документов API базы данных Python по адресу https://www.python.org/dev/peps/pep-0249/ было бы очень полезно для написания решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...