cx_oracle.connect UnicodeDecodeError,求大神支招!

2017-09-21 17:11:59 +08:00
 godwow
连接 oracle 数据库报错了,网上搜索了半天,都试过了没解决,报错信息如下,求大神帮忙

Traceback (most recent call last):
File "d:\我的文档\桌面\PythonApplication1.py", line 3, in <module>
db = cx_Oracle.connect("test/test@192.168.6.201:2521/orcl")
UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 95-96: invalid continuation byte
3853 次点击
所在节点    Python
15 条回复
ansheng
2017-09-21 17:32:54 +08:00
????????????
lolizeppelin
2017-09-21 19:05:30 +08:00
cx Oracle 找大小比较大的版本

缩水版不支持中文
godwow
2017-09-21 19:33:07 +08:00
我是用 pip install cx_Oracle 命令直接安装的,这个也会是缩水版,那我应该去哪下载?
godwow
2017-09-21 19:37:44 +08:00
@lolizeppelin 我是用 pip install cx_Oracle 命令直接安装的,这个也会是缩水版,那我应该去哪下载?
heqingpan
2017-09-21 19:52:52 +08:00
以前做的一个项目有用 python 测试 oracle 数据库,找到了这段,你可以试试。
import os
os.environ["NLS_LANG"]=db.execute("select userenv('language') from dual").fetchone()[0].encode("utf8")
heqingpan
2017-09-21 19:54:26 +08:00
主要就是在创建连接之后设置对应的 os.environ["NLS_LANG"],之后再使用就没有乱码的问题了。
godwow
2017-09-21 20:08:31 +08:00
@heqingpan 谢谢您的回复!

我在 cx_Oracle.connect 时候就报错了,源码如下:

import os
os.environ["NLS_LANG"]="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"

import cx_Oracle
db = cx_Oracle.connect("test/test@192.168.6.201:2521/orcl", encoding="utf-8")

“ SIMPLIFIED CHINESE_CHINA.ZHS16GBK ”是用您给的查询语句从数据中查询出来的,还是报错。
heqingpan
2017-09-21 20:14:33 +08:00
连接格式不对,应该是:db = cx_Oracle.connect("oracle://test:test@192.168.6.201:2521/orcl")
heqingpan
2017-09-21 20:16:39 +08:00
额,我看错了,忽略上一段,你是直接用 cx_Oracle,我之前是用 sqlalchemy

import sqlalchemy
db=sqlalchemy.create_engine("oracle://test:test@192.168.6.201:2521/orcl")
dawncold
2017-09-21 20:39:32 +08:00
我们项目是这样连接的,你试试
```python
def _get_conn(self):
os.environ['NLS_LANG'] = 'AMERICAN_CHINA.UTF8'
conn = None
connection_string = '{}/{}@{}'.format(self.user, self.password, cx_Oracle.makedsn(self.host, self.port, self.database))
try:
conn = cx_Oracle.connect(connection_string)
conn.outputtypehandler = OracleAdapter.output_type_handler
conn.autocommit = True
if self.schema:
conn.current_schema = str(self.schema) # TODO: current_schema requires str, complains against unicode, may be fixed in new release
except:
LOGGER.critical('Cannot connect to database: %(parameters)s', {'parameters': self}, exc_info=1)
try:
raise
finally:
if conn is not None:
try:
conn.close()
except Exception:
LOGGER.exception('Cannot close database connection')
else:
return conn
```
dawncold
2017-09-21 20:40:26 +08:00
godwow
2017-09-21 21:05:55 +08:00
@heqingpan @dawncold 我都试过了,还是不行。python 啥都好,就是字符编码好麻烦啊 - -!
dawncold
2017-09-21 23:02:50 +08:00
@godwow 连接报这个错误没见过,NLS_LANG 和数据库中的配置最好一样再试试
lolizeppelin
2017-09-22 01:06:41 +08:00
找 rpm 或者 exe 包

这是我以前遇到的问题 你先换版本试试

http://m.blog.chinaunix.net/uid-23504396-id-3025353.html
lscomeon
2017-09-22 08:44:24 +08:00
3 喽

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/392596

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX