이전 글에서는 SingleStoreDB 의 Procedural Language 인 MPSQL 을 이용해서 View 생성을 Batch 로 처리했습니다.
MPSQL 이 익숙치 않은 분들을 위해서 Python 코드를 이용해서 동일한 작업을 수행하도록 하겠습니다.
먼저 Python3 에 singlestoredb 라이브러리를 설치합니다.
MySQL 에 호환되는 다른 라이브러리를 사용하셔도 됩니다. 지원가능한 라이브러리는 다음을 참조하세요.
$ pip3 install singlestoredb
singlestoredb 를 import 하고 3306 포트 및 test database 를 지정하여 접속합니다.
이 때 Query 결과를 Dictionary 로 받아오게 results_type 을 'dict' 로 선택하여 컬럼명을 key 로 사용하도록 합니다.
Default 는 'list' 형식이므로 컬럼명 대신 리스트 인덱스를 사용하여 결과 컬럼을 구분해야 합니다.
import singlestoredb as s2
conn = s2.connect('user:pw@x.x.x.x:3306/test', results_type='dict')
conn.autocommit(True)
create_view 함수는 MPSQL 과 동일한 Logic 을 가지고 있습니다.
clist 테이블에서 view 의 컬럼으로 사용할 alias 를 조회하여 sel_list 변수에 저장 한 후
create view 명령어에서 각각 tname, vname, sel_list 를 조합하여 DDL 을 수행합니다.
def create_view(tname, vname):
cur.execute("SELECT GROUP_CONCAT(CONCAT_WS(' as ', CONCAT('var',orgcol), newcol) ORDER BY orgcol:>int) as cols " +
"FROM clist WHERE tname = '" + tname + "' AND use_yn = 'y'")
row = cur.fetchone()
sel_list = row['cols']
cur.execute('DROP VIEW IF EXISTS ' + vname)
cur.execute('CREATE VIEW ' + vname + ' AS SELECT id, ' + sel_list + ' FROM ' + tname)
Main 로직은 connection 으로부터 Cursor 를 얻고 tlist 를 조회하여 결과로 나온 각각의 row 별로 create_view 함수를 실행합니다.
cur = conn.cursor()
cur.execute('SELECT * FROM tlist')
for row in cur.fetchall():
create_view(row['tname'], row['vname'])
cur.execute('show tables extended')
for row in cur.fetchall():
if row['Table_type'] == 'VIEW':
print(row)
이상으로 Python 을 사용하여 SingleStoreDB 에 접속한 후 조회 및 DDL 수행을 Batch 처리하는 예제를 소개해 드렸습니다.