CentOS Python Oracle 예제

오라클 DB 테이블을 주기적으로 비우고 데이터를 갱신하는 작업이 필요해서
파이썬으로 간단히 만들기로 한다.

사용할 서버는 CentOS 6.7 + Python 2.7 환경이다.

작업1) PIP 설치
파이썬 확장모듈을 설치하기 위한 설치툴로 PIP를 설치한다.

CentOS라 yum install로 설치를 시도했으나 무슨 이유인지 실패했다.

$ sudo yum install -y python-pip

Loaded plugins: fastestmirror, refresh-packagekit, security
Setting up Install Process
Loading mirror speeds from cached hostfile
 * base: ftp.daumkakao.com
 * extras: ftp.daumkakao.com
 * updates: ftp.daumkakao.com
No package python-pip available.
Error: Nothing to do

다음으로 시도한 방법은 easy_install
** easy_install을 못찾겠으면 “find / -name easy_install” 명령으로 찾아라

$ sudo /usr/local/bin/easy_install pip
Searching for pip
Reading https://pypi.python.org/simple/pip/
Best match: pip 8.1.1
Downloading https://pypi.python.org/packages/source/p/pip/pip-8.1.1.tar.gz#md5=6b86f11841e89c8241d689956ba99ed7
Processing pip-8.1.1.tar.gz

/* .. 중간 생략 .. */

Finished processing dependencies for pip

$ sudo /usr/local/bin/pip -V
pip 8.1.1 from /usr/local/lib/python2.7/site-packages/pip-8.1.1-py2.7.egg (python 2.7)

작업2) cx_Oracle 모듈 설치

cx_Oracle 파이썬 확장모듈을 사용하기 위해서는 오라클 클라이언트가 설치되어 있어야 한다. 오라클 서버가 설치된 환경에서는 이미 설치되어 있을테니 Ok!
– 오라클 클라이언트 Basic과 Devel이 설치되어야 함

$ sudo /usr/local/bin/pip install cx_Oracle
Collecting cx-Oracle
  Downloading cx_Oracle-5.2.1.tar.gz (113kB)
    100% |################################| 122kB 904kB/s 
Installing collected packages: cx-Oracle
  Running setup.py install for cx-Oracle ... done
Successfully installed cx-Oracle-5.2.1

$ python2.7
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle  
>>> con = cx_Oracle.connect("아이디/패스워드@TNS이름")
>>> print con.version
11.2.0.1.0
>>> con.close()

만약 접속이 실패할 경우 sqlplus를 설치하여 접속을 테스트 할 것.
– TNSNAME은 $ORACLE_HOME/network/admin/tnsnames.ora 에서 정의한다

작업3) HelloWorld.py 작성

모듈 불러오기와 접속까지 끝났으면 오라클 문서를 참조하여 샘플을 테스트한다.
** 참고문서
Using Python With Oracle Database 11g

** 한글지원 참고문서
Listing 1: Old-style Unicode handling in cx_Oracle 4.x


#!/usr/local/bin/python
#-*- coding: utf-8 -*-

import cx_Oracle
import os

os.environ["NLS_LANG"] = ".AL32UTF8"

con = cx_Oracle.connect("아이디/패스워드@TNS이름")
print 'Oracle version: ' + con.version

cur = con.cursor()

#cur.execute('select table_name from user_tables')
#for result in cur:
#  print result

cur.execute('select table_name from user_tables')

row = cur.fetchone()
print 'fetchone(): '
print row

numRows = 3
res = cur.fetchmany(numRows= numRows)
print 'fetchmany(%d): '%numRows
print res

#res = cur.fetchall()
#for r in res:
#  print r

cur.close()
con.close()

Python은 정말 확장성 하난 끝내준다. 안통하는데가 없네.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: