簡體   English   中英

cx_oracle缺少右括號

[英]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
  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')

從根本上講,您正在將未加引號的字符串項目傳遞給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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM