конец запроса python cx_Oracle

#python #sql #oracle #cx-oracle

Вопрос:

Я пытаюсь обновить таблицу SQL с помощью библиотеки cx_Oracle Python, но получаю ошибку cx_Oracle.Ошибка базы данных: ORA-00933: команда SQL неправильно завершена, независимо от окончания запроса (с/без ;). Есть какие-нибудь идеи, что может произойти?

 UPDATE TABLE_NAME
SET ROW_NAME = 345434, ISSUE_DATE = 2020-02-03 12:14:28
WHERE ROW_ID = 327692
 

Примечание: дата передается как объект datetime. Приведенный выше код показывает, что выводится из трассировки стека.

Комментарии:

1.2020 — 02 — 03 = 2015.

Ответ №1:

у вас есть запятая в конце даты выпуска, также вам нужно будет передать дату в виде строки

 UPDATE TABLE_NAME
SET ROW_NAME = 345434, 
    ISSUE_DATE = '2020-02-03 12:14:28'
WHERE ROW_ID = 327692e 
 

также вы можете это сделать:

 UPDATE TABLE_NAME
SET ROW_NAME = 345434, 
    ISSUE_DATE = to_date('2020-02-03 12:14:28', 'yyyy-mm-dd hh:mi:ss am')
WHERE ROW_ID = 327692e 
 

дайте мне знать, если это поможет 🙂

Комментарии:

1. На самом деле он передается как объект datetime (который не показан выше). Ошибка читается без «,» в конце даты, поэтому я предполагаю, что дата передана правильно.

2. попробуй и узнай. обычно в sql эти ошибки возникают по одной за раз. когда вы уберете запятую с конца. вы увидите остальные ошибки. Я просто предоставил наилучший результат, в котором вы должны написать запрос. если вы передаете переменную, не нужно делать следующее, просто удалите запятую

3. Удаление «,» после даты выпуска и передача даты выпуска в качестве объекта datetime привели к той же ошибке. Не знаю, на что он жалуется.

4. покажите код python, касающийся того, как cx_oracle вызывает курсор.выполнить()

5. Оказывается, ты был прав. Python передавал объект DateTime в запрос, но отображал DateTime в виде строки ПЕРЕД передачей в базу данных oracle. Использование to_date (), как описано выше, устраняет проблему.