마크베이스(Machbase) 파이썬(Python) 모듈 연동
파이썬 모듈 사용 준비
테스트를 할 때 참고한 문서는 다음과 같다.
파이썬 모듈 사용(http://krdoc.machbase.com:8090/display/MANUAL/Python)
리눅스 우분투에서 테스트를 했지만, 다른 리눅스에서도 마찬가지 일 것이라고 생각된다.
우선 설치된 환경에서 LD_LIBRARY_PATH 라이브러리가 제대로 있는지 확인하자.
sjkim2@myhost:~$ env | grep machbase_home LD_LIBRARY_PATH=/home/sjkim2/machbase_home/lib:........생략 : <== 여기에 있는 것을 확인!!! PATH=/home/sjkim2/machbase_home/bin:생략.. MACHBASE_HOME=/home/sjkim2/machbase_home #<== 마크베이스 설치된 디렉토리
위와 같이 제대로 된 위치에 있는 것을 확인했다.
미리 설치된 파이썬 사용하는 방법
이것은 이미 마크베이스가 설치될 때 같이 설치된 python 2.7 버젼을 활용하는 방법이다.
장점은 미리 모든 것이 설정되어 있으므로, 크게 고민할 필요는 없이 그 설치된 python을 활용하면 된다.
만일 자신이 쓰는 파이썬의 버젼이 틀리거나, 이미 설치된 시스템의 것을 사용하고자 할 때는 다음 장의 파이썬 모듈 사용하는 방법을 활용하자.
아래와 같이 $MACHBASE/sample/python 디렉토리로 옮기면 파일이 다음과 같이 존재한다.
sjkim2@myhost:~/machbase_home/sample/python$ ls -al 합계 28 drwxrwxr-x 2 sjkim2 sjkim2 4096 8월 8 20:57 . drwxrwxr-x 9 sjkim2 sjkim2 4096 8월 3 12:12 .. -rw-rw-r-- 1 sjkim2 sjkim2 764 8월 3 12:12 MakeData.py -rw-rw-r-- 1 sjkim2 sjkim2 624 8월 3 12:12 Makefile -rw-rw-r-- 1 sjkim2 sjkim2 669 8월 3 12:12 Sample1Connect.py -rw-rw-r-- 1 sjkim2 sjkim2 2402 8월 3 12:12 Sample2Simple.py -rw-rw-r-- 1 sjkim2 sjkim2 1999 8월 3 12:12 Sample3Append.py -rw-rw-r-- 1 sjkim2 sjkim2 0 8월 3 12:12 __init__.py sjkim2@myhost:~/machbase_home/sample/python$
여기에서 Makefile을 보면, 마크베이스 환경에서 사용하는 python이 어디에 있는지 알 수 있다.
#****************************************************************************** # Copyright of this product 2013-2023, # InfiniFlux Corporation(or Inc.) or its subsidiaries. # All Rights reserved. #****************************************************************************** # $Id:$ PYPATH=$(MACHBASE_HOME)/webadmin/flask/Python/bin/python all: build build: make_data_file run : run_sample1 run_sample2 run_sample3 make_data_file: $(PYPATH) MakeData.py run_sample1: $(PYPATH) Sample1Connect.py run_sample2: $(PYPATH) Sample2Simple.py run_sample3: $(PYPATH) Sample3Append.py clean: rm -rf *.pyc data.txt
위의 7번째 라인을 보면, 이미 설치된 파이썬을 볼 수 있다. 이것을 사용하면, 바로 마크베이스와 연동이 된다. 우선 첫번째 샘플 소스를 보자.
#****************************************************************************** # Copyright of this product 2013-2023, # InfiniFlux Corporation(or Inc.) or its subsidiaries. # All Rights reserved. #****************************************************************************** # $Id:$ from machbaseAPI import machbase def connect(): db = machbase() if db.open('127.0.0.1','SYS','MANAGER',5656) is 0 : return db.result() if db.execute('select count(*) from m$tables') is 0 : return db.result() result = db.result() if db.close() is 0 : return db.result() return result if __name__=="__main__": print connect()
machbaseAPI 를 import 해서 query를 수행하는 것인데, 아래와 같이 실행하면 된다.
sjkim2@myhost:~/machbase_home/sample/python$ make run_sample1 /home/sjkim2/machbase_home/webadmin/flask/Python/bin/python Sample1Connect.py {"count(*)":"13"} sjkim2@myhost:~/machbase_home/sample/python$
JSON 형태로 수행한 SQL의 결과 값이 13이 나온 것을 확인할 수 있다.
만일 기존에 설치된 python을 가지고 수행하면 아래와 같이 에러가 나는 것을 확인할 수 있다.
왜냐하면, machbase 모듈이 내 시스템에는 설치되어 있지 않기 때문이다.
sjkim@myhost:~/work/nfx/machbase_home/sample/python$ python Sample1Connect.py Traceback (most recent call last): File "Sample1Connect.py", line 9, in from machbaseAPI import machbase ImportError: No module named machbaseAPI
위와 같이 machbaseAPI라는 모듈이 설치되어 있지 않다고, 에러가 발생한다.
내 환경에 맞게 모듈 다시 설치하기
이제 기존의 파이썬 환경에 마크베이스 파이썬 모듈을 설치해 보도록 하자. 설치는 매우 쉬운데 3rd-party 디렉토리에서 다음과 같이 압축을 푼다.
sjkim2@myhost:~/machbase_home/3rd-party/python-module$ ls -al 합계 40 drwxrwxr-x 2 sjkim2 sjkim2 4096 8월 3 12:12 . drwxrwxr-x 3 sjkim2 sjkim2 4096 8월 3 12:12 .. -rw-rw-r-- 1 sjkim2 sjkim2 28755 8월 3 12:12 machbaseAPI-1.0.tar.gz sjkim2@myhost:~/machbase_home/3rd-party/python-module$ tar -zxvf machbaseAPI-1.0.tar.gz machbaseAPI-1.0/ machbaseAPI-1.0/machbaseAPI/ machbaseAPI-1.0/machbaseAPI/__init__.py machbaseAPI-1.0/machbaseAPI/machbaseAPI.py machbaseAPI-1.0/README machbaseAPI-1.0/setup.py machbaseAPI-1.0/PKG-INFO machbaseAPI-1.0/libmachbaseAPI.so sjkim2@myhost:~/machbase_home/3rd-party/python-module$ cd machbaseAPI-1.0/ sjkim2@myhost:~/machbase_home/3rd-party/python-module/machbaseAPI-1.0$ ls -al; 합계 104 drwxrwxr-x 3 sjkim2 sjkim2 4096 8월 3 12:11 . drwxrwxr-x 3 sjkim2 sjkim2 4096 8월 8 21:10 .. -rw-rw-r-- 1 sjkim2 sjkim2 242 8월 3 12:11 PKG-INFO -rw-rw-r-- 1 sjkim2 sjkim2 155 8월 3 11:30 README -rwxrwxr-x 1 sjkim2 sjkim2 80097 8월 3 12:11 libmachbaseAPI.so drwxrwxr-x 2 sjkim2 sjkim2 4096 8월 3 12:07 machbaseAPI -rw-rw-r-- 1 sjkim2 sjkim2 589 8월 3 11:30 setup.py sjkim2@myhost:~/machbase_home/3rd-party/python-module/machbaseAPI-1.0$
압축을 풀고 해당 machbaseAPI-1.0 디렉토리로 가면, setup.py 가 있는데 다음과 같이 설치해 보자. (루트 권한 필요)
sjkim2@myhost:~/machbase_home/3rd-party/python-module/machbaseAPI-1.0$ sudo python setup.py install running install running build running build_py creating build creating build/lib.linux-x86_64-2.7 creating build/lib.linux-x86_64-2.7/machbaseAPI copying machbaseAPI/machbaseAPI.py -> build/lib.linux-x86_64-2.7/machbaseAPI copying machbaseAPI/__init__.py -> build/lib.linux-x86_64-2.7/machbaseAPI running install_lib running install_data creating /usr/lib/python2.7/dist-packages/machbaseAPI copying libmachbaseAPI.so -> /usr/lib/python2.7/dist-packages/machbaseAPI running install_egg_info Removing /usr/local/lib/python2.7/dist-packages/machbaseAPI-1.0.egg-info Writing /usr/local/lib/python2.7/dist-packages/machbaseAPI-1.0.egg-info sjkim2@myhost:~/machbase_home/3rd-party/python-module/machbaseAPI-1.0$
시스템의 파이썬으로 동작을 하는지 확인해 보자. 원래 파이썬 샘플 디렉토리로 이동하자.
sjkim2@myhost:~/machbase_home/3rd-party/python-module/machbaseAPI-1.0$ cd $MACHBASE_HOME/sample/python/ sjkim2@myhost:~/machbase_home/sample/python$ ls -al 합계 44 drwxrwxr-x 2 sjkim2 sjkim2 4096 8월 8 20:59 . drwxrwxr-x 9 sjkim2 sjkim2 4096 8월 3 12:12 .. -rw-rw-r-- 1 sjkim2 sjkim2 764 8월 3 12:12 MakeData.py -rw-rw-r-- 1 sjkim2 sjkim2 624 8월 3 12:12 Makefile -rw-rw-r-- 1 sjkim2 sjkim2 669 8월 3 12:12 Sample1Connect.py -rw-rw-r-- 1 sjkim2 sjkim2 2402 8월 3 12:12 Sample2Simple.py -rw-rw-r-- 1 sjkim2 sjkim2 1999 8월 3 12:12 Sample3Append.py -rw-rw-r-- 1 sjkim2 sjkim2 0 8월 3 12:12 __init__.py -rw-rw-r-- 1 sjkim2 sjkim2 14799 8월 8 20:59 data.txt sjkim2@myhost:~/machbase_home/sample/python$ which python /usr/bin/python sjkim2@myhost:~/machbase_home/sample/python$ python Sample1Connect.py {"count(*)":"13"} sjkim2@myhost:~/machbase_home/sample/python$
이제 시스템에 디폴트로 설치된 python 으로도 마크베이스를 사용할 수 있게 되었다.
나머지 샘플 수행해 보기
약간 복잡한 두번째 예제를 수행해 보자. Sample2Simple.py 소스코드는 다음과 같다. 출력은 json 모듈을 사용해서 JSON 형태로 출력되도록 되어 있다.
#****************************************************************************** # Copyright of this product 2013-2023, # InfiniFlux Corporation(or Inc.) or its subsidiaries. # All Rights reserved. #****************************************************************************** # $Id:$ import re import json from machbaseAPI import machbase def insert(): db = machbase() if db.open('127.0.0.1','SYS','MANAGER',5656) is 0 : return db.result() db.execute('drop table sample_table') db.result() if db.execute('create table sample_table(d1 short, d2 integer, d3 long, f1 float, f2 double, name varchar(20), text text, bin binary, v4 ipv4, v6 ipv6, dt datetime)') is 0: return db.result() db.result() for i in range(1,10): sql = "INSERT INTO SAMPLE_TABLE VALUES (" sql += str((i - 5) * 6552) #short sql += ","+ str((i - 5) * 42949672) #integer sql += ","+ str((i - 5) * 92233720368547758L) #long sql += ","+ "1.234"+str((i-5)*7) #float sql += ","+ "1.234"+str((i-5)*61) #double sql += ",'id-"+str(i)+"'" #varchar sql += ",'name-"+str(i)+"'" #text sql += ",'aabbccddeeff'" #binary sql += ",'192.168.0."+str(i)+"'" #ipv4 sql += ",'::192.168.0."+str(i)+"'" #ipv6 sql += ",TO_DATE('2015-08-0"+str(i)+"','YYYY-MM-DD')" #date sql += ")"; if db.execute(sql) is 0 : return db.result() else: print db.result() print str(i)+" record inserted." query = "SELECT d1, d2, d3, f1, f2, name, text, bin, to_hex(bin), v4, v6, to_char(dt,'YYYY-MM-DD') as dt from SAMPLE_TABLE"; if db.execute(query) is 0 : return db.result() result = db.result() for item in re.findall('{[^}]+}',result): print "d1 : "+res.get('d1') print "d2 : "+res.get('d2') print "d3 : "+res.get('d3') print "f1 : "+res.get('f1') print "f2 : "+res.get('f2') print "name : "+res.get('name') print "text : "+res.get('text') print "bin : "+res.get('bin') print "to_hex(bin) : "+res.get('to_hex(bin)') print "v4 : "+res.get('v4') print "v6 : "+res.get('v6') print "dt : "+res.get('dt') if db.close() is 0 : return db.result() return result if __name__=="__main__": print insert()
수행해보면 다음과 같다.
sjkim2@myhost:~/machbase_home/sample/python$ python Sample2Simple.py {"EXECUTE RESULT":"Execute Success"} 1 record inserted. ............................. {"EXECUTE RESULT":"Execute Success"} 9 record inserted. d1 : 26208 d2 : 171798688 d3 : 368934881474191032 f1 : 1.23428 f2 : 1.23424 name : id-9 text : name-9 bin : 616162626363646465656666 to_hex(bin) : 616162626363646465656666 v4 : 192.168.0.9 v6 : ::192.168.0.9 dt : 2015-08-09 ............생략....
성공적으로 수행됨을 확인할 수 있다. 이제 파이썬으로도 간단하게 연동하고, 데이터를 입력 및 출력할 수 있게 되었다.
데이터 구조가 아예 JSON으로 오기 때문에 다른 솔루션과의 연동도 매우 쉬울 것이다.
Contact the Machbase team with your questions!
info@machbase.com