指定绑定变量后的实际SQL语句

bio*_*ffe 2 python sql oracle cx-oracle

我试图记录从我的脚本执行的每个SQL语句.但是我想到了一个我无法克服的问题.

有没有办法在指定绑定变量后计算实际的SQL语句.在SQLite中,我必须使用以下代码计算要手动执行的语句:

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
Run Code Online (Sandbox Code Playgroud)

似乎CX_Oracle有cursor.parse()工具.但我无法弄清楚如何在执行之前欺骗CX_Oracle来计算我的查询.

nos*_*klo 7

查询永远不会计算为单个字符串.查询的实际文本和参数永远不会被插值,也不会产生真正的完整字符串.

这就是使用参数化查询的全部要点 - 您将查询与数据分开 - 一次性防止sql注入和限制,并允许轻松查询优化.数据库既可以单独获取,又可以完成它需要做的事情,而无需将它们连接在一起.

也就是说,您可以自己生成查询,但请注意,您生成的查询(尽管可能等效)不是实际在数据库上执行的查询.