python连接数据库 cx_oracle问题

基于python访问oracle数据库利用select提取数据遇到的坑。

1、DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded:

解决办法:参考该博客下载instantclientx64_jb51.rar,并配置好环境变量即可。

https://blog.csdn.net/white_xuqin/article/details/82878860

2、访问中文数据库,显示乱码,具体表现为中文变为"?"和十六进制为"3F"

解决办法:数据库数据转换函数select rawtohex(utl_raw.cast_to_raw('aaa123')) from dualbinascii.unhexlify()、"字符串".decode('utf-8')解决,该模式可以提取出数据库中的中英文字符与python程序写进去的英文字符与数字

https://www.cnblogs.com/Aiolos/p/12336379.html

3、较为棘手的问题rawtohex(utl_raw.cast_to_raw())binascii.unhexlify()解决不了由程序引进的中文字符,如再程序中写得sql语句为select rawtohex(utl_raw.cast_to_raw('呵呵')) from dual,再经过binascii.unhexlify()与decode仍会显示"???",查询网上的资料,大致原因可能是因为python3有一套字符编码方式,我的Oracle数据库版本较老,采用的字符集编码为US7ASCII,英文与数据不冲突,但中文两个编码集存在冲突,所以老编码放在新的编码集中就出现了"???"

https://www.cnblogs.com/Gaoqiking/p/10455283.html

解决办法:rawtohex(utl_raw.cast_to_raw())是将字符转换为十六进制,只有再sql语句编写的时候先将中文字段通过

'中文'.encode('utf-8').hex()  编码为十六进制,通过"select '%s' from dual"%(该字段)的方式将该十六进制带到程序中,其余处理同上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值