У меня есть приведенный ниже код, который работал до сегодняшнего дня, в основном я передаю несколько списков для вставки в базу данных с помощью 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 Подумав об этом, я думаю, что да, я забыл поставить Connection.commit() в какой-то момент
Похоже, вы оставили изменения незафиксированными в SQL Developer — либо зафиксируйте, либо откатите их в сеансе этого клиента, прежде чем пытаться запустить этот код.
Я сделал это в pycharm, а не в разработчике sql.
Дополнительный комментарий: не забудьте запланировать обновление до последней версии cx_Oracle, которая была выпущена под новым названием python-oracledb пару лет назад, см. объявление о выпуске .
cx_oracle устарел/устарел - заменен на python-oracledb
У меня есть приведенный ниже код, который работал до сегодняшнего дня, в основном я передаю несколько списков для вставки в базу данных с помощью Python. Предыдущие строки перед кодом ниже берут столбцы из кадра данных pd, а затем переключают все на список. затем в следующем коде они вставляются в базу данных. но теперь это занимает много времени, а результатов нет. Сегодня я внес несколько изменений, но ничто не мешало коду работать.
Строка, которую вы пытаетесь изменить, вероятно, была UPDATE
d в предыдущем сеансе (вероятно, SQL Developer), но этот первый сеанс не выдал COMMIT
или ROLLBACK
, поэтому строка заблокирована, а второй сеанс ожидает снятия блокировки. .
Попробуйте запустить код Python, и если код ждет «вечно», перейдите к любому приложению, у которого открыт первый сеанс (возможно, SQL Developer или другой экземпляр Python, который все еще работает) и запустите команду COMMIT
(или ROLLBACK
) в этом первом сеансе. и посмотрите, завершится ли вдруг код Python. Если это так, значит, он ожидал снятия блокировки в строке.
Если вы не знаете, какой сеанс заблокировал строку, вы можете попробовать закрыть все остальное, и при закрытии соединения данные неявно ROLLBACK
изменятся. Если это по-прежнему не работает, вы можете попробовать завершить все неактивные сеансы, подключенные к базе данных (сначала спросите своих коллег, чтобы не убить то, что кто-то активно использует).
Вы вышли из сеанса открытым с незафиксированной транзакцией?