ホームページ  >  記事  >  バックエンド開発  >  Python cx_Oracle モジュールのインストールと使用方法の詳細な紹介

Python cx_Oracle モジュールのインストールと使用方法の詳細な紹介

高洛峰
高洛峰オリジナル
2017-02-13 13:51:001625ブラウズ

python cx_Oracle モジュールのインストール

最近、単一の Oracle から MySQL Sharding クラスターにデータを移行するデータ移行スクリプトを書く必要があります。 Linux 上で cx_Oracle をインストールするのは少し面倒に感じます。 。

Oracle クライアントの場合、対応する Python モジュール (ここでは Oracle の公式 Python モジュール - cx_Oracle を使用しました) をインストールする必要があるだけでなく、通常はインスタント クライアントを選択するだけで十分です。 tnsnames.ora も設定する必要があります (もちろん、単に host:port/schema を通じてアクセスすることもできます)。

インストール:

1. まずバージョンを決定します。 Oracle データは少し古いため、古いバージョンである Oracle Instant Client 10.2.0.4 を選択しました。

2. instantclient-basic をダウンロードします。ダウンロードアドレス: http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html。 。これは Oracle に対する重大な問題です。ダウンロードする前に登録する必要があります。重要なのは、登録時にパスワードには大文字と小文字を使用する必要があるということです。少なくとも 8 文字。そのため、銀行のパスワードよりも安全なパスワードを取得する必要があり (まあ、何を入力したか忘れてしまいましたが...)、ベーシックをダウンロードするだけで済みました。

$wget http://download.oracle.com/otn/linux/instantclient/10204/basic-10.2.0.4.0-linux-x86_64.zip

3. インストールと設定

$unzip instantclient-basic-linux.x64-10.2.0.4.0.zip
$cd instantclient_10_2
$cp * /usr/lib  #直接放到动态库搜索路径中,不需要额外的环境配置

或
$unzip instantclient-basic-linux.x64-10.2.0.4.0.zip
$cp -rf instantclient_10_2 /opt/
$vi /etc/profile
   export ORACLE_HOME=/opt/instantclient_10_2
   export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME

$source /etc/profile

4. tnsnames.ora を設定します (tns を設定する必要はありません)

tnsnames.ora は実際には存在しないことに注意してください。自分で作成してください (これも非常に複雑です) 嫌です、最初は何かをインストールする必要があると思いました)、私はこの方法を使用しませんでした。興味があればグーグルで調べてください。

5. cx_Oracle Python モジュールをダウンロードしてインストールします

$wget http://downloads.sourceforge.net/project/cx-oracle/5.1.2/cx_Oracle-5.1.2-10g-py26-1.x86_64.rpm
$rpm -ivh cx_Oracle-5.1.2-10g-py26-1.x86_64.rpm 
$ls /usr/lib/python2.6/site-packages/cx_Oracle.so #有这个文件表示安装成功,根据python的位置,也可能在其他地方,自己找一下吧

6. 検証と問題解決

$python
>>import cx_Oracle

エラーが報告された場合: import cx_Oracle で ImportError: libclntsh.so.10.1: を開けません共有オブジェクト ファイル: いいえ そのようなファイルまたはディレクトリ

は、インスタント クライアントのダイナミック ライブラリが見つからないことを意味します。環境変数が設定されているかどうか、有効かどうか、バージョンが正しいかどうかを確認してください。

エラーが報告された場合: ImportError: ./cx_Oracle.so: un 未定義のシンボル: PyUnicodeUCS4_Decode

Google的信息:There is nothing wrong with Debian. Python supports two incompatible 
 modes of operation for Unicode, UCS2 (the default), and UCS4. Debian uses the default,
 Redhat uses UCS4. You need to recompile the extension for UCS-2 mode
 (i.e. using a Debian installation); this would fix the undefined symbol: PyUnicodeUCS4_Decode

そこで、python を再コンパイルします

$./configure --prefix=/usr/local/python2.6.5 --enable-shared -enable-unicode=ucs4
$make;make install

もう一度検証して、最終的に正常にインポートします。

使用法:

1. 基本的な接続 – Oracle tns エイリアスを使用します

connection =cx_Oracle.connect("tp/tp@ocn_test")
#查看tns alias命令
cmd>tnsping ocn_test
TNS Ping Utility forLinux: Version 9.2.0.8.0-Production on 27-SEP-201110:47:48
Copyright (c) 1997, 2006, Oracle Corporation. Allrights reserved.
Used parameter files:
/opt/……/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL =TCP)(HOST =10.20.36.19)(PORT =1520))) (CONNECT_DATA =(SID =ocntest)))
OK (10msec)

2. ユーザーは接続するためのパスワードを入力します

3. Python コマンドの形式: python script.py tp/tp@ocn_test

pwd =getpass.getpass()
connection =cx_Oracle.connect("tp",pwd,"ocn_test")

4. Easy Connect 構文を使用して Drive

connection =cx_Oracle.connect(sys.argv[1])

5 TNSNAME

connection =cx_Oracle.connect('tp','tp','10.20.36.19:1521/ocntest')
#or
connection =cx_Oracle.connect('tp/tp@10.20.36.19:1521/ocntest')

6 .SYSDBA

tns_name =cx_Oracle.makedsn('10.20.36.19','1521',' ocntest ')
connection =cx_Oracle.connect('tp','tp',tns_name)

LinuxサーバーでOracle操作を実行中にエラーが発生しました:

connection =cx_Oracle.connect('tp/tp@ocn_test', mode=cx_Oracle.SYSDBA)
#or as SYSOPER
connection =cx_Oracle.connect('tp/tp@ocn_test', mode=cx_Oracle.SYSOPER)

解決策:

http を参照してください。 ://ora-12514.ora-code.com / を何度も試した後、最終的に 5 番目の接続方法を使用したところ、問題は即座に解決されました。

読んでいただきありがとうございます、皆さんのお役に立てれば幸いです、このサイトをサポートしていただきありがとうございます!

python cx_Oracle モジュールのインストールと使用方法の詳細については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。