오라클 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은 정말 확장성 하난 끝내준다. 안통하는데가 없네.