DB 서버에서 Python을 사용하기 위한 기본 패키지가 설치되어 있는지 확인합니다.
IBM i의 기본 관리 툴인 ACS (Access Client Solution)로 들어가서 Open Source Package Management 를 실행하면 Installed Packages 에 아래 항목들이 있는지 확인하고, 없으면 설치합니다.
SSH 터미널에서 Python 을 실행하기 위한 PATH 설정을 합니다.
ACS 의 SSH Terminal (또는 랩탑에서 SSH 세션을 지원하는 다른 툴을 사용해도 됩니다. 예: iTerm, Putty 등등) 을 실행하고 로그인합니다.
$ touch $HOME/.bash_profile
$ setccsid 1208 $HOME/.bash_profile
$ echo 'PATH=/QOpenSys/pkgs/bin:$PATH' >> $HOME/.bash_profile
$ echo 'export PATH' >> $HOME/.bash_profile
$ cat .bash_profile
PATH=/QOpenSys/pkgs/bin:$PATH
export PATH
방금 만든 profile 정보가 잘 실행되는지 확인하기 위해 SSH Terminal 을 로그아웃한 다음, 다시 접속합니다.
Python 가상 환경을 만듭니다. 아래 예시는 myvenv 라는 이름으로 현재 디렉토리에 가상환경을 만들고, 가상환경을 활성화하는 명령입니다.
$ bash
bash-5.1$ python3 -m venv --system-site-packages myvenv
bash-5.1$ source myvenv/bin/activate
(myvenv) bash-5.1$
다음에 재접속할 때는 파이썬 가상환경을 만드는 명령은 제외하고, 활성화하는 명령어만 실행하면 됩니다. (아래 참조)
$ bash
bash-5.1$ source myvenv/bin/activate
가상환경에서 새로운 파이썬 모듈을 설치해보겠습니다. PTable (Pretty Table)은 데이터를 조회할 때 결과를 테이블 형태로 예쁘게 보여주는 모듈입니다.
(myvenv) bash-5.1$ pip3 install PTable
Collecting PTable
Using cached PTable-0.9.2.tar.gz (31 kB)
Preparing metadata (setup.py) ... done
Building wheels for collected packages: PTable
Building wheel for PTable (setup.py) ... done
Created wheel for PTable: filename=PTable-0.9.2-py3-none-any.whl size=22925 sha256=7661c91ada777605f541fb2e3a8aae5ea3eb9ff37b8ed013f15081733d03b208
Stored in directory: /home/user1/.cache/pip/wheels/b8/d5/8b/e0c9765594e0dc8093aae5f67eacc08b9b533da598c710b54a
Successfully built PTable
Installing collected packages: PTable
Successfully installed PTable-0.9.2
(myvenv) bash-5.1$
간단한 DB 를 조회하는 파이썬 프로그램을 작성하고 테스트해보겠습니다.
(myvenv) bash-5.1$ vim kpretty.py
from prettytable import from_db_cursor
import ibm_db_dbi as db2
conn = db2.connect()
cur = conn.cursor()
cur.execute("select * from sampledb.employee")
print(from_db_cursor(cur))
(myvenv) bash-5.1$ python3 kpretty.py
+--------+-----------+---------+------------+----------+---------+------------+----------+---------+-----+------------+----------+---------+---------+
| EMPNO | FIRSTNME | MIDINIT | LASTNAME | WORKDEPT | PHONENO | HIREDATE | JOB | EDLEVEL | SEX | BIRTHDATE | SALARY | BONUS | COMM |
+--------+-----------+---------+------------+----------+---------+------------+----------+---------+-----+------------+----------+---------+---------+
| 000010 | CHRISTINE | I | HAAS | A00 | 3978 | 1965-01-01 | PRES | 18 | F | 1933-08-24 | 52750.00 | 1000.00 | 4220.00 |
| 000020 | MICHAEL | L | THOMPSON | B01 | 3476 | 1973-10-10 | MANAGER | 18 | M | 1948-02-02 | 41250.00 | 800.00 | 3300.00 |
| 000030 | SALLY | A | KWAN | C01 | 4738 | 1975-04-05 | MANAGER | 20 | F | 1941-05-11 | 38250.00 | 800.00 | 3060.00 |
| 000050 | JOHN | B | GEYER | E01 | 6789 | 1949-08-17 | MANAGER | 16 | M | 1925-09-15 | 40175.00 | 800.00 | 3214.00 |
| 000060 | IRVING | F | STERN | D11 | 6423 | 1973-09-14 | MANAGER | 16 | M | 1945-07-07 | 32250.00 | 500.00 | 2580.00 |
| 000070 | EVA | D | PULASKI | D21 | 7831 | 1980-09-30 | MANAGER | 16 | F | 1953-05-26 | 36170.00 | 700.00 | 2893.00 |
한글 테이블로 다시 테스트해보겠습니다.
이번에는 액셀 시트로 변환해줄 수 있는 파이썬 모듈을 설치해서 테스트해보겠습니다.
(myvenv) bash-5.1$ pip3 install xlsxwriter
Collecting xlsxwriter
Downloading XlsxWriter-3.0.3-py3-none-any.whl (149 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.0/150.0 KB 144.9 kB/s eta 0:00:00
Installing collected packages: xlsxwriter
Successfully installed xlsxwriter-3.0.3
테스트할 파이썬 코드는 다음과 같습니다. 테이블의 데이터를 가져와 Worldcup_Rank.xlsx 라는 이름의 액셀 시트로 변환하는 내용입니다.
from xlsxwriter import Workbook
import ibm_db_dbi as db2
cur = db2.connect().cursor()
cur.execute("select W_YEAR, W_RANK, W_COUNTRY, W_COUNTRY_ENG, W_GROUP FROM SAMPLEDB.WORLDCUP_RANK")
headers = [desc[0] for desc in cur.description]
with Workbook('Worldcup_Rank.xlsx') as workbook:
ws = workbook.add_worksheet()
ws.write_row('A1', headers)
for row, data in enumerate(cur, start=1):
ws.write_row(row, 0, data)
(myvenv) bash-5.1$ python3 db2i-to-excel.py
(myvenv) bash-5.1$ ls -al *.xlsx
-rw-r--r-- 1 user1 0 5785 Nov 28 13:11 Worldcup_Rank.xlsx
-rw-r--r-- 1 user1 0 6935 Nov 28 12:07 newexcel.xlsx
이제 ACS의 Integrated File System 을 열어서 생성된 액셀 파일을 다운로드 받아서 열어보면, 액셀로 잘 생성되어 있는 것을 볼 수 있습니다.
[ 테스트 환경 정보 ]
SQL로 REST API 서비스 만들기 (1) | 2023.01.04 |
---|---|
해시 함수 (HASH)로 데이터 무결성 검증하기 (0) | 2022.12.27 |
동일한 쿼리인데 왜 실행시간이 달라질까? (0) | 2022.11.21 |
SQL0913 Row or object in use (0) | 2022.11.14 |
Db2 사용자 정의 함수(UDF) 성능 관련 옵션 (0) | 2022.11.07 |
댓글 영역