python连接OB绑定变量问题

某现场客户程序使用python,引用了jaydebeapi库连接oceanbase的jdbc驱动oceanbase-client-*.*.*.jar

JayDeBeApi是一个python模块,可通过它来使用java的JDBC连接数据库,为该数据库提供了 Python DB-API v2.0

OB官网给的jaydebeapi连接ob的列子:

#!/usr/bin/env python3.6

# -*- coding: UTF-8 -*-

encoding = "utf8"

import jaydebeapi

def ob_test():

url = 'jdbc:oceanbase://host:port/database'

user = 'u*****'

password = 'p*****'

driver = 'com.alipay.oceanbase.jdbc.Driver'

jarFile = './oceanbase-client-2.2.3.jar'

sqlStr = 'select * from test_python'

# conn=jaydebeapi.connect('oracle.jdbc.driver.OracleDriver','jdbc:oracle:thin:@10.0.0.0:1521/orcl',['hwf_model','hwf_model'],'E:/pycharm/lib/ojdbc14.jar')

conn = jaydebeapi.connect(driver, url, [user, password], jarFile)

curs = conn.cursor()

curs.execute(sqlStr)

result = curs.fetchall()

print(result)

curs.close()

conn.close()

ob_test()

使用pip安装jaydebeapi:

pip install JayDeBeApi

python setup.py install

jython setup.py install

客户的需求是想要之前在oracle中执行正常的变量绑定同样在ob的oracle租户下正常执行,但报错:

all_tabs_sql = """select
t.COLUMN_NAME,
t.DATA_TYPE
from ALL_TAB_COLS t
where t.OWNER= :OWNER
and t.TABLE_NAME = :TARGET_TABLE
and t.COLUMN_NAME not like 'S$%'
order by t.COLUMN_ID"""

t_cur.execute(all_tabs_sql, {"OWNER": "ODT", "TARGET_TABLE": "S$SESSION_K0"})

客户的需求是指定绑定变量赋值,默认的jaydebeapi不支持,只支持以下这种按顺序的绑定变量:

insert into table1 (a1) values(?)

或者这种:

 

经OB驱动专家确认,jaydebeapi的 jaydebeapi.Cursor._set_stmt_parms少了以下function:

添加红框内的到jaydebeapi的Cursor._set_stmt_parms即可实现

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值