知乎也是我写的: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

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


被折叠的 条评论
为什么被折叠?



