admin

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

sql

我正在尝试记录从脚本执行的每个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以计算我的查询。


阅读 156

收藏
2021-07-01

共1个答案

admin

该查询 永远不会 作为单个字符串计算。查询和参数的实际文本 不会 插值,并且 不会同时 产生真正的完整字符串。

这就是使用参数化查询的全部要点-将查询与数据分开-
一次性阻止sql注入和限制,并允许轻松进行查询优化。数据库既可以单独获取数据,又可以执行所需的操作,而无需将它们连接在一起。

也就是说,您可以自己生成查询,但是请注意,虽然生成的查询可能等效,但实际上并不是在数据库上执行的查询。

2021-07-01