[英]cx_Oracle.DatabaseError: ORA-00907: missing right parenthesis
[英]cx_oracle missing right parenthesis
我正在使用cx_oracle python庫查找最近90分鍾內具有ModifyDate的所有記錄。
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
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
所以會是這樣
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')
從根本上講,您正在將未加引號的字符串項目傳遞給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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.