Вставка с помощью cx_Oracle внезапно занимает вечность, но в sql Developer все в обычное время

У меня есть приведенный ниже код, который работал до сегодняшнего дня, в основном я передаю несколько списков для вставки в базу данных с помощью Python. Предыдущие строки перед кодом ниже берут столбцы из кадра данных pd, а затем переключают все на список. затем в следующем коде они вставляются в базу данных. но теперь это занимает много времени, а результатов нет. Сегодня я внес несколько изменений, но ничто не мешало коду работать. Иногда я вижу тег внизу с надписью «кроме cx_oracle.databaseerror», но код все еще выполняется.

try:
    # Establish a connection
    cursor = connection.cursor()
    query = """
    INSERT INTO int_Stg.UnitScheduleOfferHourly 
    (HOUR, UNITSCHEDULEID, VERSIONID, MINRUNTIME,NOTIFICATIONTIME, NOLOADCOST, COLDSTARTUPCOST, INTERSTARTUPCOST, HOTSTARTUPCOST, DELETED,VALIDTOTIME, VALIDFROMTIME) 
    VALUES (
    TO_DATE(:1, 'dd-mon-yyyy HH24:MI:SS'),
    :2,
    2,
    :3,
    :4,
    :5,
    :6,
    :7,
    :8,
    :9,
    TO_TIMESTAMP('31-DEC-9999 05.00.00.000000000','DD-Mon-RR HH24:MI:SS.FF'),
    TO_TIMESTAMP('01-JAN-1900 00.00.00.000000000', 'DD-Mon-RR HH24:MI:SS.FF')
    )"""

    # Sample data to be inserted (replace with your actual data)
    data = [(str(hour[i]),unitscheduleid[i], minruntime[i],notificationtime[i],noloadcost[i], coldstartupcost[i], interstartupcost[i], hoststartupcost[i],
           deleted[i]) for i in range(len(hour))] 

    # Execute the query
    cursor.executemany(query, data)
    
    # Commit the transaction
    connection.commit()

    print("Data inserted successfully.")

except cx_Oracle.DatabaseError as exc:
    error, = exc.args
    print("Oracle-Error-Code:", error.code)
    print("Oracle-Error-Message:", error.message)

Вы вышли из сеанса открытым с незафиксированной транзакцией?

p3consulting 29.04.2024 19:53

@p3consulting Подумав об этом, я думаю, что да, я забыл поставить Connection.commit() в какой-то момент

arsham vosoughinia 29.04.2024 19:57

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

Alex Poole 29.04.2024 20:05

Я сделал это в pycharm, а не в разработчике sql.

arsham vosoughinia 29.04.2024 20:25

Дополнительный комментарий: не забудьте запланировать обновление до последней версии cx_Oracle, которая была выпущена под новым названием python-oracledb пару лет назад, см. объявление о выпуске .

Christopher Jones 30.04.2024 00:05

cx_oracle устарел/устарел - заменен на python-oracledb

thatjeffsmith 30.04.2024 15:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У меня есть приведенный ниже код, который работал до сегодняшнего дня, в основном я передаю несколько списков для вставки в базу данных с помощью Python. Предыдущие строки перед кодом ниже берут столбцы из кадра данных pd, а затем переключают все на список. затем в следующем коде они вставляются в базу данных. но теперь это занимает много времени, а результатов нет. Сегодня я внес несколько изменений, но ничто не мешало коду работать.

Строка, которую вы пытаетесь изменить, вероятно, была UPDATEd в предыдущем сеансе (вероятно, SQL Developer), но этот первый сеанс не выдал COMMIT или ROLLBACK, поэтому строка заблокирована, а второй сеанс ожидает снятия блокировки. .

Попробуйте запустить код Python, и если код ждет «вечно», перейдите к любому приложению, у которого открыт первый сеанс (возможно, SQL Developer или другой экземпляр Python, который все еще работает) и запустите команду COMMIT (или ROLLBACK) в этом первом сеансе. и посмотрите, завершится ли вдруг код Python. Если это так, значит, он ожидал снятия блокировки в строке.

Если вы не знаете, какой сеанс заблокировал строку, вы можете попробовать закрыть все остальное, и при закрытии соединения данные неявно ROLLBACK изменятся. Если это по-прежнему не работает, вы можете попробовать завершить все неактивные сеансы, подключенные к базе данных (сначала спросите своих коллег, чтобы не убить то, что кто-то активно использует).

Другие вопросы по теме