Pregunta

Estoy intentando registrar cada sentencia SQL ejecutada desde mis guiones. Sin embargo contemplo un problema que no puedo superar.

¿Hay una manera de calcular instrucción SQL real después se especificaron las variables se unen. En SQLite que tenía que calcular la sentencia ejecutada de forma manual, utilizando el código de abajo:

def __sql_to_str__(self, value,args):
    for p in args:
        if type(p) is IntType or p is None:
            value = value.replace("?", str(p) ,1)
        else:
            value = value.replace("?",'\'' + p + '\'',1)
    return value

Parece cx_Oracle tiene cursor.parse () instalaciones. Pero no puedo encontrar la manera de engañar a cx_Oracle para calcular mi consulta antes de su ejecución.

¿Fue útil?

Solución

La consulta es no computada como una sola cadena. El texto de la consulta y los parametros son no interpolada y no producir una cadena completa real con ambos.

Ese es el punto de utilizar consultas parametrizadas - separar la consulta de los datos - la prevención de inyecciones SQL y limitaciones de una sola vez, y permitiendo la optimización de consultas fácil. La base de datos se pone tanto por separado, y hace lo que tiene que hacer, sin tener que unirse a ellos juntos.

Dicho esto, se puede generar la consulta a sí mismo, pero tenga en cuenta que la consulta que genera, aunque probablemente equivalente, no es en realidad lo que se ejecuta en la base de datos.

Otros consejos

Su mejor opción es hacerlo en el servidor de base de datos, ya que un conector de Oracle se implementa correctamente no pondrá las variables se unen en una cadena antes de enviar la consulta al servidor. Ver si se puede obtener la configuración del servidor de Oracle que hace que ingrese las consultas que ejecuta.

Es posible que desee considerar el uso de función de traza de SQL extendido de Oracle para esto. Yo recomiendo empezar aquí: http: //carymillsap.blogspot .com / 2011/01 / nuevo papel de maestro de rendimiento-with.html .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top