cx_oracle用户名密码变量,Python cx_Oracle绑定变量

你误用了装订。

有三种不同的方法可以将变量与cxúu Oracle绑定在一起see here:

1)通过将元组传递给带有编号变量的SQL语句:sql = "select * from sometable where somefield = :1 and otherfield = :2"

cur.execute(sql, (aValue, anotherValue))

2)通过将关键字参数传递给带有命名变量的SQL语句:sql = "select * from sometable where somefield = :my_field and otherfield = :anotherOne"

cur.execute(sql, myField=aValue, anotherOne=anotherValue)

3)通过将字典传递给带有命名变量的SQL语句:sql = "select * from sometable where somefield = :my_field and otherfield = :anotherOne"

cur.execute(sql, {"myField":aValue, "anotherOne":anotherValue})

备注

那你的代码为什么能工作?

让我们试着理解这里发生了什么:bind= {"var" : "ciao"}

sql = "select * from sometable where somefield = :bind and otherfield = :bind"

cur.execute(sql,(bind["var"], bind["var"]))

甲骨文将理解,它期望一个变量。这是一个命名变量,通过名称bind链接。然后,应将参数作为命名参数提供,如下所示:cur.execute(sql, bind="ciao")

或者用字典,比如:cur.execute(sql, {bind:"ciao"})

但是,当cx_Oracle接收到一个元组时,它会按数字在绑定中回退,就好像您的SQL语句是:sql = "select * from sometable where somefield = :1 and otherfield = :2"

当您传递bind['var']两次时,这只是字符串"ciao"。它将两个元组项映射到编号的变量:cur.execute(sql, ("ciao", "ciao"))

这是偶然的,但这一准则是非常误导人的。

要绑定单个值的元组

还要注意,第一个选项需要一个元组。但是,如果要绑定单个值,则可以使用此表示法创建单个值的元组:sql = "select * from sometable where somefield = :1"

cur.execute(sql, (aValue,))

[编辑]:感谢@tyler christian提到传递dict是由cxúOracle支持的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值