python查询oracle数据blob类型字段
在网上找了代码,内容很简单,直接上代码
import os
import cx_Oracle
# os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
db_orcl = cx_Oracle.connect("用户/sid@ip/orcl")
cr_orcl = db_orcl.cursor()
cr_orcl.execute("select * from user ")
rs_user = cr_orcl.fetchall()
for user in rs_user:
userId = user[0]
print(userId)
if user[1] == '':
continue
blob = user[1].read()
f = open("D:\\allImages\\"+userId+".jpg", "wb")
f.write(blob)
f.close()db_orcl.commit()
cr_orcl.close()
代码本身没有毛病,但是不同的环境会有不同的问题
1、首先需要初始化cx_Oracle,这里就不不能直接pip install cx_Oracle,很多传统企业oracle版本都不一样,并且使用的客户端版本也不一样,比如我碰到的环境,数据库oracle10g 运行操作系统是64位,但是不知道那头装的是oracle client是32位(既有环境不敢碰),这时候你就不得不把对应的环境换成python 32位的,cx_Oracle的模块呢也要单独下载cx_Oracle-5.1.2-10g.win32-py2.7.msi,我用的是这个,可以自行百度,也可以直接这里下载https://download.youkuaiyun.com/download/zhang1034490826/11274525
2、# os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8' 这个干脆注掉,否则跟数据库不一致会出现乱码
3、blob = user[1].read() 读取blob字段这里,需要加一个判断,否则如果blob字段为空的化,这里是user[1]的type是nonetype
4、输出,如果想直接print内容的话,一定搞清楚存储的编码及内容类型