Posting

Machbase의 최신 소식을 지금 만나보세요

[MACHBASE 파이썬] 모듈 연동

마크베이스(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

연관 포스트

C언어로 Binary data를 Machbase에 넣기

1.개요 Data를 다루다 보면 numeric, varchar 형 데이터뿐만 아니라 JPG, PNG, MP3와 같은 Binary data도 database에 저장해야 할 때가 존재한다. 그러나 일반 data들과는 달리 Binary

[MACHBASE 연동] Android studio에서 JDBC 연결하기

마크베이스 기술지원본부 이현민 1. 개요 수많은 데이터들이 많은 환경에서 생성되고 있는 오늘날, 우리 현대인들의 동반자인 스마트폰 또한 데이터생성의 주체로써 또는 전달자로서 알게 모르게 그 구실을