Python如何应用cx_Oracle获取oracle中的clob字段问题
最近在用Python编写连接数据库获取记录的脚本,其中用到了cx_Oracle模块。它的语法主要如下:
cx_Oracle.connect('username','pwd','IP/HOSTNAME:PORT/TNSNAME')
importcx_Oracle
db1=cx_Oracle.connect('yang','yang','127.0.0.1:1523/yangdb')
db2=cx_Oracle.connect('yang/yang@127.0.0.1:1523/yangdb')
对于dsn方式:
makedsn(IP/HOST,PORT,TNSNAME)
dsn=cx_Oracle.makedsn('127.0.0.1','1523','yangdb')
db3=cx_Oracle.connect('yang','yang',dsn)
例子:
oracle@rac3:/home/oracle/python>vimconndb4.py
importcx_Oracle
username="yang"
pwd="yang"
--建立连接
dsn=cx_Oracle.makedsn('127.0.0.1','1523','yangdb')
db1=cx_Oracle.connect(username,pwd,dsn)
--获取游标
cursor=db1.cursor()
--执行查询
sql="select*fromtab"
cursor.execute(sql)
--获取数据,可以有多种方式fetchall(),fetchmang(N)(N为正整数),fetchone()
result=cursor.fetchall()
count=cursor.rowcount
在自己进行cursor.fetchall()操作后,得出result如下:
('HAD_ZYBJ_420_0003','HAD_LINK_TEMPLATE','TYPE',1,'LINK_PID',None,'TYPE','值域检查','道路基本属性检查','Fatal','TYPE字段存在非0、1、2的值',)
('HAD_ZYBJ_420_0004','HAD_LINK_TEMPLATE','LANE_NUM',1,'LINK_PID',None,None,'非空检查','道路基本属性检查','Fatal','LANE_NUM字段不能为空',)
('HAD_ZYBJ_420_0005','HAD_LINK_TEMPLATE','SEQ_NUM',1,'LINK_PID',None,None,'非空检查','道路基本属性检查','Fatal','SEQ_NUM字段不能为空',)
('HAD_ZYBJ_420_0006','HAD_LINK_TEMPLATE','WIDTH',1,'LINK_PID',None,None,'非空检查','道路基本属性检查','Fatal','WIDTH字段不能为空',)
。。。
这其中有clob字段。搜寻了半天,有应用dbms_lob.substr(clob字段,4000,1)这种方法容易报错,并且和其他字段一起选择时,出现字符缓冲区不足的问题。
之后又找到方法说新建个字段然后利用这个dbms_lob的方法将clob字段转换为一个新的temp字段。但是这个方法你无法确定选取多长的字符串。
最后通过询问后才发现原来问题出现在我使用了cursor.fetchall()这个方法,只需要我在fetchall之前对cursor进行操作,即:
cursor.execute(sql) forrowincursor: print(row[11])#或者print(row[11].read()),row[11]是clob字段
问题解决!
以上这篇Python如何应用cx_Oracle获取oracle中的clob字段问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。