cx_Oracle。如何在调试阶段查看cursor.execute()过程生成的查询?

问题描述 投票:0回答:1

我需要“蛋白质”专家的帮助,因为没有灵魂的“聊天”一直在他们的错误版本中追着我:D

假设我有以下代码:

    import cx_Oracle

    # SQL query
    query = "SELECT * FROM users WHERE name = :name AND age = :age"
    
    # parameters for the query
    params = {'name': 'John Doe', 'age': 30}
    
    cursor.execute(f""{query}""", params)

有什么办法可以看到(在日志或打印中)将我的参数代入其中后获得了什么样的选择?也就是说,要确保最终的查询是正确的:

SELECT * FROM users WHERE name = 'John Doe' AND age = 30

而不是一些语法错误,例如:

SELECT * FROM users WHERE name = ''John Doe'' AND age = 30

我没有看到任何语法错误 - 只是当我使用 Python 运行 SQL 查询时,它不会产生任何结果。

python cx-oracle
1个回答
0
投票

您发送到服务器的查询实际上是

SELECT * FROM users WHERE name = :name AND age = :age
——这很好。字符串插值不会像您想象的那样发生——因为这可能会引入 SQL 注入错误!在运行脚本之前,您可以通过检查将环境变量
PYO_DEBUG_PACKETS
设置为任意值生成的数据包输出来验证发送到服务器的内容。

我不确定这是否是您没有得到任何结果的原因 - 但您的代码不完整。您需要执行 fetch 调用才能实际检索数据:

rows = cursor.fetchall()
。如果这不是问题,则可能是由于一系列其他原因造成的,您必须确定是哪一个。一个常见问题是数据在另一个会话中未提交!

© www.soinside.com 2019 - 2024. All rights reserved.