python - 指定绑定(bind)变量后的实际 SQL 语句

标签 python sql oracle cx-oracle

我正在尝试记录从我的脚本执行的每条 SQL 语句。但是我想到一个我无法克服的问题。

有没有办法在指定绑定(bind)变量后计算实际的 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 注入(inject)和限制,并允许轻松优化查询。数据库分别获取两者,并执行它需要执行的操作,而无需将它们连接在一起。

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

关于python - 指定绑定(bind)变量后的实际 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4693926/

相关文章:

python - 将图像中的像素值编辑为 numpy 数组

java - Postgres : How to get SELECT to detect new insertions within a specific table

没有排序值的 PHP fetch_array/sql

mysql - 真实项目,什么时候可以达到bigint maxvalue

sql - 改进 Oracle 中的连接查询

python - 如何使用字典更新 DataFrame 行的多个(但不是全部)值?

python - 打印输出格式

python numpy减去作为矩阵的元素

mysql - 获取在特定日期没有凭证的所有员工

sql - 查询在使用连接时抛出 ORA-00904 Invalid Identifier