cursor.execute("SELECT * FROM t WHERE c1=:2 AND c2=:1", (1, 2))
以
执行SELECT * FROM t WHERE c1=1 AND c2=2
而不是
SELECT * FROM t WHERE c1=2 AND c2=1
正如我所料。为什么呢?
实际上所有:数字都被完全忽略了
sql = ":5, :0, :0, :2, :1, :3"
的解释与
相同sql = ":1, :2, :3, :4, :5, :6"
这是出于意图还是错误?
答案 0 :(得分:1)
cx_Oracle正在使用具有此行为的OCI。您可以在本白皮书(第14页底部和第15页顶部)中阅读相关内容:
有效地Oracle从左到右扫描并分配位置编号以按照遇到的顺序绑定变量。您可以使用命名绑定变量来避免这种混淆。