我正在尝试记录从脚本执行的每个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
似乎CX_Oracle具有 cursor.parse() 功能。但是我不知道如何在执行之前欺骗CX_Oracle以计算我的查询。
该查询 永远不会 作为单个字符串计算。查询和参数的实际文本 不会 插值,并且 不会同时 产生真正的完整字符串。
这就是使用参数化查询的全部要点-将查询与数据分开- 一次性阻止sql注入和限制,并允许轻松进行查询优化。数据库既可以单独获取数据,又可以执行所需的操作,而无需将它们连接在一起。
也就是说,您可以自己生成查询,但是请注意,虽然生成的查询可能等效,但实际上并不是在数据库上执行的查询。