6

これが重複していないことを願っています。検索しても何も役に立ちませんでした。

私はcx_Oracle過去数日間、それをインストールして使用していました。現在の問題に到達するまで、すべてがうまくいきました。スキーマを変更したいのです。sqlplus を使用していた場合、単純な「alter session set current_schema=toto;」するでしょうが、それを回避する方法がわかりませんcx_Oracle

最新のソース バージョン cx_Oracle-5.0.2.tar.gz をダウンロードしました。

ドキュメントによると、スキーマの変更はConnection.current_schema、読み取り/書き込み属性である必要がある設定の単純なケースです...問題は、私のConnectionオブジェクトに属性がないことcurrent_schemaです。

>>> c = cx_Oracle.connect(...)
>>> dir(c)
['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', 
'__getattribute__', '__hash__', '__init__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', 
'__subclasshook__', 'autocommit', 'begin', 'cancel', 'changepassword', 'close', 
'commit', 'cursor', 'dsn', 'encoding', 'inputtypehandler',
'maxBytesPerCharacter', 'nencoding', 'outputtypehandler', 'password', 'prepare', 
'register', 'rollback', 'stmtcachesize', 'tnsentry', 'unregister', 'username', 
'version']

を使用して属性を設定しようとしています

>>> c.current_schema = 'toto'

エラーが発生します...__setattr__明らかにそれを防ぐためにオーバーライドされています。

だから... 誰も方法を知っていますか?


これが私が得たエラーです。

>>> c.current_schema = 'toto'
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'cx_Oracle.Connection' object has no attribute 'current_schema'

>>> setattr(c, 'current_schema', 'toto')
# same error

そして、ここにOSとpythonに関する情報があります:

SUSE LINUX Enterprise Server 9 (x86_64)
VERSION = 9
PATCHLEVEL = 3

そして、私はpython 2.6.2(64ビット用にコンパイル)を使用しています

cx_Oracleまた、まったく同じマシンで 64 ビット用にコンパイルしました。

4

2 に答える 2

10

さて、私は最終的に、多くの試行錯誤の後、fn提案に従い、cx_Oracle何が間違っているかを見つけるために内部を調査しました。

多くの引数とメソッドは、いくつかのフラグを介してのみ利用可能であることが判明しました:

  • WITH_UNICODEアクティブ化encodingしてnencoding属性を付与
  • ORACLE_10Gaction、およびmodule_clientinfocurrent_schema

確認したところ、Oracle クライアントのバージョン 9 に対してコンパイルしたことがわかりましたcx_Oracle...そのため、Oracle クライアントのバージョン 10.2.0.3 に対して再コンパイルしたところ、これらの属性にアクセスできるようになりました。

制限がドキュメントに正確に記載されていなかったのは残念です...そして、ソースコードが利用可能であることを非常に感謝しています.

于 2010-01-06T13:34:50.630 に答える
2

cx_Oracle を再インストールしてみてください。あなたの cx_Oracle はおそらく台無しです。OS と Python のバージョンは?

于 2010-01-06T11:54:09.057 に答える