Python cx_oracle通过位置绑定变量忽略数字

时间:2017-02-17 14:28:27

标签: python cx-oracle

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"

这是出于意图还是错误?

1 个答案:

答案 0 :(得分:1)

cx_Oracle正在使用具有此行为的OCI。您可以在本白皮书(第14页底部和第15页顶部)中阅读相关内容:

http://www.oracle.com/technetwork/database/database-technologies/php/whatsnew/building-best-drivers-131920.pdf

有效地Oracle从左到右扫描并分配位置编号以按照遇到的顺序绑定变量。您可以使用命名绑定变量来避免这种混淆。