問題タブ [cx-oracle]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - cx_Oracle とデータ ソース パラダイム
Java には、データベース アクセス用の Java パラダイムが実装されていますDataSource
。このオブジェクトは、データベース接続の作成に関する有用な抽象化を作成します。オブジェクトはデータベース構成を保持しますが、要求があったDataSource
場合にのみデータベース接続を作成します。これにより、すべてのデータベース構成と初期化コードを 1 か所に保持でき、データベースの実装を簡単に変更したり、テスト用にモック データベースを使用したりできます。
現在、cx_Oracle を使用する Python プロジェクトに取り組んでいます。cx_Oracle では、モジュールから直接接続を取得します。
私はDataSource
、cx_Oracle との類似点を見つけようとしています。これは、新しいクラスを作成して cx_Oracle をラップすることで簡単に作成できますが、これが Python で正しい方法であるかどうか疑問に思っていました。
python - py2exe'd プログラムから Oracle に接続する際のエラー: Oracle 環境ハンドルを取得できません
私のpythonプログラム(Python 2.6)は、Pythonインタープリターを使用して実行すると正常に動作し、エラーなしでOracleデータベース(10g XE)に接続します。ただし、py2exe を使用してコンパイルすると、実行可能バージョンは cx_Oracle.connect() の呼び出しで「Oracle 環境ハンドルを取得できません」で失敗します。
私は喜びなしで次のことを試しました:
- Oracle インスタント クライアント 10g および 11g
- Oracle XE クライアント
- cx_Oracle-5.0.2-10g.win32-py2.6.msi を再インストールします
- 設定
ORACLE_HOME
とPATH - Oracle クライアントと exe だけを持つ別のコンピュータ
- exe をビルドするためのさまざまなオプション (圧縮なしおよび/または zip ファイルの使用)
私のテストケース:
testora.py:
build_testora.py:
結果:
python - cx_oracleを使用してMERGEから影響を受ける行の数を返します
CX_Oracle内で「MERGEINTO...」SQLコマンドを実行して、影響を受ける行の数を取得するにはどうすればよいですか。
cx_oracleでMERGESQLを実行すると、cursor.rowcountが-1になります。マージの影響を受ける行数を取得する方法はありますか?
python - cx_Oracle と kinterbasdb をインポートするとエラーが返される
皆さん、こんにちは。
Python で次のライブラリをインポートしようとしています: cx_Oracle と kinterbasdb。
しかし、試してみると、非常によく似たメッセージエラーが表示されます。*cx_Oracle の場合: トレースバック (最新の呼び出しが最後): ファイル ""、1 行目、ImportError の場合: DLL の読み込みに失敗しました: 特定の手順を実行できない可能性があります。(翻訳: 指定された手順を見つけることができませんでした)
*kinterbasdb の場合: トレースバック (最新の呼び出しが最後): ファイル "C:\"、1 行目、ファイル "c:\Python26\Lib\site-packages\kinterbasdb__init__.py"、119 行、import _kinterbasdb as _k ImportError 内: DLL のロードに失敗しました: 特定のモジュールの可能性があります。(翻訳: 指定された手順を見つけることができませんでした)
Windows XPでpython 2.6.4を使用しています。cx_Oracle のバージョンは 5.0.2 です。kinterbasdb のバージョンは 3.3.0 です。
編集: cx_Oracle で解決しました。間違ったバージョンの問題でした。しかし、私は正しいバージョンを使用していると信じており、Firebird サイト ( kinterbasdb-3.3.0.win32-setup-py2.6.exe ) からダウンロードしました。これについてはまだサポートが必要です。
ここで手を貸してくれる人はいますか?どうもありがとうダンテ
python - cx_Oracle を使用したスキーマの変更
これが重複していないことを願っています。検索しても何も役に立ちませんでした。
私はcx_Oracle
過去数日間、それをインストールして使用していました。現在の問題に到達するまで、すべてがうまくいきました。スキーマを変更したいのです。sqlplus を使用していた場合、単純な「alter session set current_schema=toto;」するでしょうが、それを回避する方法がわかりませんcx_Oracle
。
最新のソース バージョン cx_Oracle-5.0.2.tar.gz をダウンロードしました。
ドキュメントによると、スキーマの変更はConnection.current_schema
、読み取り/書き込み属性である必要がある設定の単純なケースです...問題は、私のConnection
オブジェクトに属性がないことcurrent_schema
です。
を使用して属性を設定しようとしています
エラーが発生します...__setattr__
明らかにそれを防ぐためにオーバーライドされています。
だから... 誰も方法を知っていますか?
これが私が得たエラーです。
そして、ここにOSとpythonに関する情報があります:
そして、私はpython 2.6.2(64ビット用にコンパイル)を使用しています
cx_Oracle
また、まったく同じマシンで 64 ビット用にコンパイルしました。
python - cx_Oracleを64ビットのItaniumWindowsで動作させるにはどうすればよいですか?
64ビットのOracle10.2も実行している64ビットのItaniumサーバーでWindowsServer2003を実行していますが、Python2.5用のcx_Oracleをインストールしたいと思います。私は以前にWindowsとLinuxの両方でcx_Oracleを何度も使用し、それらのプラットフォームの32ビットバージョンでも以前にコンパイルしましたが、IA64コンパイルを試したことがありません。
http://cx-oracle.sourceforge.net/にあるcx_Oracleのバイナリビルドはいずれも64ビットではなく、実行しようとするとエラーが発生するimport cx_Oracle
ので、コンパイルする必要があると思います。ソース。
実行するpython setup.py build
と、PythonがVisual Studio 2003で構築されており、互換性のあるバイナリを生成できるものが必要であるというエラーが表示されます。私はVisualStudio2005を持っていますが、これはC標準ライブラリの別のバージョンとリンクしているため、そしておそらく他の理由でも、明らかに法案に適合していません。残念ながら、Visual Studio 2003はダウンロードできなくなり、どこで入手できるかわかりません。
だから私はhttp://sourceforge.net/projects/mingw/files/からMinGWをダウンロードしますが、これも32ビット形式でのみ利用可能です。とにかく試してみますが、リンクしているOracle DLLの1つについて、コンパイル中にエラーが発生し、ファイル形式が無効になります。
この時点で、私にはたくさんの選択肢があり、どこに努力すればよいかわかりません。
64ビットのMinGWをhttp://sourceforge.net/projects/mingw-w64/からダウンロードして使用してみることができますが、ソースとしてのみ使用できるように見えるため、コンパイラをコンパイルする必要があります。 VisualStudio2005。
Pythonのx8632ビットビルドを使用してみて、http: //www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.htmlからOracle Instant Client SDKをダウンロードし、それを使用してcx_Oracleをビルドします。おそらく、ORACLE_HOMEをクライアントに設定して、64ビットサーバーDLLに対してリンクを試行しないようにする必要がありますが、これは機能する可能性があります。
Visual Studio 2005を使用してソースからPython自体をコンパイルしてみると、Visual Studio 2005を使用してcx_Oracleをビルドでき、バイナリ互換性の問題を心配する必要がなくなります。Linuxで何度もソースからPythonをコンパイルしましたが、問題はありませんでした。そのため、Windowsでも同じように簡単だと思います。
Visual Studio 2005を適切なDLLに対してリンクさせ、Visual Studio 2003を必要とせずに、その方法で互換性のあるバイナリを生成する方法を理解することができます。直感的には、VisualStudioは古いバージョンのそれ自体と互換性のあるバイナリを生成できるはずです。しかし、私のコンパイラーの経験のほとんどはgccを使用しているので、よくわかりません。
私は自分の努力をどこに向けるべきか本当によくわかりません。誰かが次にどこに行くべきかについて何か提案がありますか?役立つ場合は、受け取った特定のエラーメッセージの一部をコピーして貼り付けることができます。
特に、cx_Oracleを64ビットのItaniumバージョンのWindowsで動作させたことがある人からの連絡をお待ちしています。これを最初に試すことはできません。
python - カーソルの再利用と新しいカーソルの作成のトレードオフは何ですか?
cx_Oracle (または一般的に Oracle) では、クエリごとにカーソルを割り当てたり、複数のクエリでカーソルを再利用したりできますか。
もちろん、どちらの方法でも同じデータが返されます。
2 つのアプローチのトレードオフは何ですか? 特に多かれ少なかれ効率的ですか?多くのクエリでカーソルを再利用することの潜在的な落とし穴はありますか?
python - cx_Oracle、ジェネレーター、Python のスレッド
接続オブジェクトが異なるスレッドで使用されている場合、cx_Oracle カーソルはどのように動作しますか? ジェネレーターはこの動作にどのように影響しますか? 具体的には...
編集:元のサンプル関数は正しくありませんでした。サブ関数によってジェネレーターが返されましたyield
が、ループ内で直接使用されていませんでした。finally
これにより、いつ実行されるか(実行後) が明確にreturn
なりますが、別のスレッドがカーソルの作成元の接続オブジェクトの使用を開始した場合にカーソルを使用できるかどうかはまだわかりません。実際には (少なくとも python 2.4 では)、構文エラーが発生するようですtry...finally
。yield
Get()
複数のスレッドから呼び出される関数です。接続はthreaded=False
引数で作成されます。
不思議なんだけど...
- スレッド 2 が現れて同じ接続オブジェクトを使用する場合、スレッド 1 の
cursor
オブジェクトは引き続き使用できますか? そうでない場合、何が起こる可能性がありますか?
私が見ている動作は、プロトコル エラーについて話している cx_Oracle の例外であり、その後に segfault が続きます。