Как перебрать большую базу данных Oracle, используя python и jdbc-драйвер, и сохранить измененные значения записей в другой таблице? - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть БД Oracle с более чем 5 миллионами строк со столбцами типа varchar и blob. Для подключения к базе данных и чтения записей я использую python 3.6 с драйвером JDBC и библиотеку JayDeBeApi. Чего я пытаюсь добиться, так это прочитать каждую строку, выполнить некоторые операции над записями (например, используйте регулярное выражение), а затем сохраните новые значения записей в новой таблице. Я не хочу загружать все записи в память, поэтому я хочу получить их из базы данных, сохранить полученные данные, обработать их и затем добавить в другую таблицу. В настоящее время я извлекаю все записи одновременно, например, сначала 1000, затем следующие 1000 и так далее. Это то, что я до сих пор:

statement = "... a select statement..."
connection= dbDriver.connect(jclassname,[driver_url,username,password],jars,)
cursor = connection.cursor()
cursor.execute(statement)
fetched = cursor.fetchall()
for result in fetched:
    preprocess(result)
cursor.close()

Как я могу изменить свой код для последовательной выборки и куда поместить второй оператор, который вставляет новые значения в другую таблицу?

1 Ответ

0 голосов
/ 27 апреля 2018

Как вы сказали, fetchall() - плохая идея в этом случае, поскольку она загружает все данные в память.

Чтобы избежать этого, вы можете перебрать cursor сам объект:

cur.execute("SELECT * FROM test")
for row in cur:  # iterate over result set row by row
    do_stuff_with_row(row)
cur.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...