我有一个充满信息的数据库,我正在尝试编写一个python脚本,该脚本将提取一些数据并将其组织成报告。这是我到目前为止的内容:
import cx_Oracle import pandas as pd conn = cx_Oracle.connect('REDACTED') cursor = conn.cursor() # Currently hard-coded to return single known motor number cursor.execute('SELECT MOTORID FROM MOTORS WHERE SERIALNUM=804') # Returns [(11)] lMotorID = cursor.fetchall() # Query Assessments for list of how long the motor had run when assessment was taken cursor.execute("SELECT DISTINCT RUNHOURS FROM ASSESSMENTS WHERE MOTORID = %s \ ORDER BY RUNHOURS" % lMotorID[0]) # Returns [(0), (0.91), (8), (25), ...] lHours = cursor.fetchall() # Query for number of installed sensors by senor type cursor.execute("SELECT SENSTYP, COUNT(STATUS) FROM HEALTH LEFT JOIN INSTRUMENTATION \ ON HEALTH.INSTROID = INSTRUMENTATION.INSTROID LEFT JOIN ASSESSMENTS \ ON HEALTH.ASSESSID = ASSESSMENTS.ASSESSID WHERE ASSESSMENTS.ASSESSID \ IN (SELECT ASSESSID FROM ASSESSMENTS WHERE MOTORID = 11 AND RUNHOURS = %s) \ GROUP BY SENSTYP ORDER BY SENSTYP" % lHours[2]) # Returns a 2-column dataframe with sensor type in column 0 and the total in column 1 dfTotal = pd.DataFrame(cursor.fetchall())
因为我希望此方法适用于任何电动机,所以我想用一个变量替换硬编码的
MOTORID = 11
。我试着用这个替换最后一个查询:
cursor.execute("SELECT SENSTYP, COUNT(STATUS) FROM HEALTH LEFT JOIN INSTRUMENTATION \ ON HEALTH.INSTROID = INSTRUMENTATION.INSTROID LEFT JOIN ASSESSMENTS \ ON HEALTH.ASSESSID = ASSESSMENTS.ASSESSID WHERE ASSESSMENTS.ASSESSID \ IN (SELECT ASSESSID FROM ASSESSMENTS WHERE MOTORID = %s AND RUNHOURS = %s) \ GROUP BY SENSTYP ORDER BY SENSTYP" % (lMotorID[0], lHours[2])) dfTotal = pd.DataFrame(cursor.fetchall())
这就是我收到ORA-00936错误的时间。我不明白为什么查询要用硬编码的值完成,但是不知道用一个变量替换该值(在上一个查询中有效)。预先感谢。
我有一个充满信息的数据库,我正在尝试编写一个python脚本,该脚本将提取一些数据并将其组织成报告。到目前为止,这是我所拥有的:import cx_Oracle import pandas ...
需要修复cursor.execute
的语法,例如