Docker环境解决python连接Oracle数据库‘utf-8‘ can‘t decode bytes xxxx in position问题

本文详细介绍了在Docker环境中,使用Python连接Oracle数据库时遇到的'utf-8'编码错误问题。作者尝试了多种解决办法,包括使用sqlalchemy的create_engine和调整字符集,但都未能成功。最终通过在SQL查询中对varchar字段使用to_nchar()函数转换为unicode,解决了ORA-29275异常,实现了数据的正常读取和写入。然而,这种方法可能导致对非varchar类型字段的类型转换问题,需要额外处理。

知乎也是我写的:Docker环境解决python连接Oracle数据库'utf-8' can't decode bytes xxxx in position问题 - 知乎

网上关于用python连接Oracle数据库报错的相关回答较少,我用百度和谷歌都搜索过相关问题,但是一般搜索不到相关的问题,或者提供的解决办法都不能解决我的问题。因而打算写一篇文章来给我最近遇到的相关问题一个记录。

我的场景是这样的:需要在一台与外界环境隔绝的机器上部署Docker,然后连接内网的Oracle数据库并写入postgressql中,因为没办法访问外网,不好在机器上安装各种各样的工具,因而采用了Docker的方式将python的环境在外部打好镜像传到内网里,把脚本部署到Docker上来执行。

python用到的数据库相关包如下:

  • psycopg2==2.8.4
  • psycopg2-binary==2.8.4
  • cx-Oracle==8.3.0
  • SQLAlchemy
  • pandas

我遇到的问题是用python的cx_Oracle读取Oracle的表的时候,由于Oracle使用的中文编码,我利用以下语句创建连接并访问数据时报错,

import pandas as pd
import cx_Oracle
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
dsn = oracle_ip + ":" + oracle_port + "/" + oracle_db
orcl_conn = cx_Oracle.connect(user=oracle_user, pass
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值