【问题标题】:python cx oracle expecting string, unicode or buffer objectpython cx oracle 需要字符串、unicode 或缓冲区对象
【发布时间】:2014-10-03 23:52:45
【问题描述】:

我正在尝试在 python 中运行以下代码 sn-p 以连接到 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

【问题讨论】:

  • 您是否尝试从连接字符串中删除u(unicode)?
  • 是的,没有什么不同。
  • 在我将 cx_oracle 构造函数中所需的参数添加到 create_engine 作为 **kwargs 后,这实际上消失了,它被透明地传递给底层 cx_oracle 调用。它缺少这些。

标签: python sqlalchemy cx-oracle


【解决方案1】:

如果您遇到此问题,很可能是因为您没有传入底层 dbapi 调用所需的参数。

在我的例子中,我在 create_engine 调用中添加了额外的用户、密码和 dsn 参数以及现有参数,这些参数被传递给 cx_oracle 调用并且它起作用了。

这样的东西应该可以工作

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

【讨论】:

    猜你喜欢
    • 2011-10-04
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 2018-05-07
    • 1970-01-01
    • 2015-05-03
    相关资源
    最近更新 更多