Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

PythonでOracleに接続する

そーいえば真面目にやったことなかったのでメモ。

Oracle clientのダウンロード

とりあえずpure pythonでは動かないのでOracleのサイト
からclientをダウンロードする必要がある。
http://www.oracle.com/technology/software/tech/oci/instantclient/index.html

とりあえずBasicをダウンロードする。
ダウンロードしたら解凍して適当な場所に置く。
(libclntsh.so.x.xって奴を使う)

環境変数

clientを置いた場所に環境変数を設定する

export ORACLE_HOME=解凍パス
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME

とりあえず.soが見えればいい。
WIndowsの人は要らない。

cx_Oracleのダウンロード

実際のドライバであるcx_Oracleをダウンロードする。
ソースからビルドするには大変なのでバイナリで落とす。
Windowsインストーラインスコして終わりのはず。

cx_Oracle - Python Interface for Oracle Database

バイナリはrpmなのでUbuntu何かの人はalienrpm->deb
にしてクリックしてインスコ

自分でビルドしてるんだけどー

基本的に普通にインスコするとデフォルトのpython
(大体はpython2.5かな)
インスコされてしまう。
だからといってソースからビルドするにはヘッダとか要るは
ずなのでメタクソめんどい。

僕の場合は/optにいろんなバージョンのpythonを入れてるの
でそいつでも使えるようにしたいわけ。
(僕の場合、メインはpython2.6のtrunk版)
基本的に使うだけならcx_Oracle.soをコピればいい。

Ubuntuだと

/usr/lib/python2.5/site-packages/

にcx_Oracle.soがいるのでピーコする。

使ってみる

dsnを渡さないといけない仕様っぽい。
dsnはmakedsnで作れる。

import cx_Oracle

dsn = cx_Oracle.makedsn(host名, port_num, sidname)
con = cx_Oracle.connect("scott", "tiger", dsn)
cur = con.cursor()
cur.execute("select * from TEST");
print cur.fetchall()

sqlalchmeyでは

create_engine("oracle://scott/tiger@dsn")

create_engine("oracle://scott:tiger@host:port/sidname")

の2通り書ける。

sqlalchmeyが使えるようになるとテストデータの作成とかが
アホのように簡単になります。

Oracle使う案件というと多くはJavaを使う事が多いと思います
が、データをプログラムで組みながらと作りたいいった時にJa
vaだと正直しんどいです。

pythonvimとかでササーと書いて、ササーと動かすと非常に
楽です。なので仕事でpython使いたいとかいう人はこーいったケ
ースでもpythonを使ってみてはいかがでしょうか。