cx_oracle отсутствует правая скобка - PullRequest
0 голосов
/ 20 сентября 2018

Я использую библиотеку Python cx_oracle, чтобы найти записи, для которых была изменена дата за последние 90 минут.

import cx_Oracle
import datetime
from datetime import timedelta
import config as config

timeNow = datetime.datetime.now()
previousTime = timeNow - datetime.timedelta (minutes = 0)
connection = cx_Oracle.connect(user, password, connection)
cur = connection.cursor()
statement = "SELECT * FROM woodburn_all WHERE modifiedDate >= to_date(" + str(previousTime) +")"
print statement
r = cur.execute(statement)
for row in cur:
    print row

Печатная инструкция выбора выглядит правильно:

SELECT * FROM woodburn_all WHERE to_date(modifiedDate) >= to_date(2018-09-2 11:02:10.460000)

Я не вижу, где я что-то не вижу в скобках.Это какая-то странная дата / время?

РЕДАКТИРОВАТЬ: Использование Python v2.7

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

По сути, вы передаете строковый элемент без кавычек в свой запрос Oracle.Как упоминалось в комментариях @TheImpaler, просто используйте параметризация , которая будет обрабатывать кавычки и литералы.

Кроме того, используйте strftime, чтобы преобразовать объект datetime в нужный вам строковый формат.На самом деле, вам не нужно вычитать минуты:

time_now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M')

# PREPARED STATEMENT
statement = "SELECT * FROM woodburn_all WHERE modifiedDate >= to_date(:1, :2)"

# PASSING TUPLE OF PARAMS
r = cur.execute(statement, (time_now, 'YYYY-MM-DD HH24:MI'))

for row in r:
    print(row)
0 голосов
/ 20 сентября 2018
your problem in sql statement where clause
 to_date(2018-09-2 11:02:10.460000)

потому что, если вы напишите это в oracle

select  to_date(2018-09-2 11:02:10.460000) from dual this will trrow
  1. ORA-00907: отсутствует правая скобка, когда возникает какая-либо синтаксическая ошибка оператора SQL, движок oracle выдает эту ошибку

так было бы так

select TO_DATE('09/02/2018 13:27:18', 'MM/DD/YYYY HH24:MI:SS') from dual

так что ваше предложение where будет

TO_DATE('09/02/2018 13:27:18', 'MM/DD/YYYY HH24:MI:SS')
...