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来计算我的查询.
查询永远不会计算为单个字符串.查询的实际文本和参数永远不会被插值,也不会产生真正的完整字符串.
这就是使用参数化查询的全部要点 - 您将查询与数据分开 - 一次性防止sql注入和限制,并允许轻松查询优化.数据库既可以单独获取,又可以完成它需要做的事情,而无需将它们连接在一起.
也就是说,您可以自己生成查询,但请注意,您生成的查询(尽管可能等效)不是实际在数据库上执行的查询.