python cx oracle 期待字符串、Unicode或缓冲区对象

0 投票
1 回答
3771 浏览
提问于 2025-04-18 16:48

我正在尝试在Python中运行以下代码片段,以连接到Oracle数据库,但总是遇到以下错误。我尝试了很多组合,但似乎都不行。我理解这个错误,但不明白这里到底是什么不兼容。有没有人遇到过这个问题?我该如何解决?

文件“”,第1行,在 文件“/workplace/applications/python2.7/lib/python2.7/site-packages/sqlalchemy/engine/base.py”,第1613行,在执行

connection = self.contextual_connect(close_with_result=True)   File   "/workplace/applications/python2.7/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1661, in contextual_connect  

self.pool.connect(),   File "/workplace/applications/python2.7/lib/python2.7/site-packages/sqlalchemy/pool.py", line 326, in connect  

return _ConnectionFairy(self).checkout()   File   "/workplace/applications/python2.7/lib/python2.7/site-packages/sqlalchemy/pool.py", line 485, in __init__  

rec = self._connection_record = pool._do_get()   File   "/workplace/applications/python2.7/lib/python2.7/site-packages/sqlalchemy/pool.py", line 770, in _do_get  

return self._create_connection()   File   "/workplace/applications/python2.7/lib/python2.7/site-packages/sqlalchemy/pool.py", line 279, in _create_connection  

return _ConnectionRecord(self)   File   "/workplace/applications/python2.7/lib/python2.7/site-packages/sqlalchemy/pool.py", line 372, in __init__   

self.connection = self.__connect()   File   "/workplace/applications/python2.7/lib/python2.7/site-packages/sqlalchemy/pool.py", line 433, in __connect  

connection = self.__pool._creator()   File    "/workplace/applications/python2.7/lib/python2.7/site-packages/sqlalchemy/engine/strategies.py", line 80, in connect

return dialect.connect(*cargs, **cparams)   File   "/workplace/applications/python2.7/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 283, in connect

return self.dbapi.connect(*cargs, **cparams)    

TypeError: expecting string, unicode or buffer object


from sqlalchemy.ext.declarative import declarative_base;
from sqlalchemy import create_engine;
engine = create_engine(u'oracle+cx_oracle://localhost:1521/orcl', echo=True)
result = engine.execute(u"select 1 from dual");

环境设置:

Python 2.7
SqlAlchemy 0.9.7 和 0.8.7
Cx Oracle(最新版本)
Oracle 数据库 10g 版本 10.2.0.2.0

1 个回答

0

如果你遇到了这个问题,最可能的原因是你没有传递底层数据库API调用所需的参数。

在我的情况下,我在调用create_engine的时候,除了原有的参数外,还添加了用户、密码和数据源名称(dsn)这几个额外的参数,这样就成功传递给了cx_oracle的调用,结果就正常工作了。

像下面这样应该可以正常运行:

create_engine(u'oracle+cx_oracle://localhost:1521/orcl', echo=True, user='<>', password='<>', dsn='<>')

撰写回答