IBM에서 제공하는 DB2와 python 연동을 하려고 하는데,
왜 이렇게 reference가 부실한 것인지.. ^_ㅠ 좀 정리좀 해둬야겠다.
1. 라이브러리 설치
pip install ibm_db
설치가 제대로 되었는지는, python에서 import ibm_db 를 실행했을 때 문제가 없으면 잘 설치 되었다는 것^_^
2. DB Connection 설정
파이썬에서, DB 접속을 가능하게 하기 위해서는 DB Connection 을 설정해주어야 합니다.
Python - DB2 Connection
IBM에서 일반적으로 2개의 connection 방법을 제공한다.
"persistent connection vs. non- persistent connection"
비지속 연결(non-persistent connection)은 매번 자원을 요청할 때 새로운 TCP Connection을 생성하는 것이고,
지속 연결(persistent connection)은 하나의 TCP Connection을 생성하고 그 연결을 통해 모든 요청을 처리하는 것이다.
뭐, 간단하게는 요청이 자주 들어오면 지속 연결이 좋겠으나,
secure 측면에서 자주 요청이 없을 경우에는 비지속 연결형이 더 낫지 않을까 하는 생각이 든다. 흠흠~
import ibm_db
#connect to a local or cataloged DB
# 1) non-persistent connection
conn = ibm_db.connect("database", "username", "password")
# 2) persistent connection
pconn = ibm_db.pconnect("database", "username", "password")
#connect to an uncataloged DB
conn = ibm_db.connect("DATABASE=name; HOSTNAME=host; PORT=60000; PROTOCOL=TCPIP; UID=username; PWD=password;" , "", "")
3. CRUD 등의 SQL 문 실행
- INSERT 문
conn = ibm_db.connect(f"DATABASE={DATABASE}; HOSTNAME={HOSTNAME};PORT={PORT};PROTOCOL=TCPIP;UID={USER_NAME};PWD={PASSWORD};", "", "")
try :
#SQL 문 작성
sql = "INSERT INTO survey_resp_cantrl (survey_no,email ,value_type, value) VALUES(?,?,?,?);"
stmt = ibm_db.prepare(conn, sql)
param = {VALUE1}, {VALUE2}, {VALUE3}, {VALUE4}
ibm_db.execute(stmt, param)
except :
print(f'error occured. {ibm_db.stmt_errormsg()}')
finally :
conn.close()
SELECT문
conn = ibm_db.connect(f"DATABASE={DATABASE}; HOSTNAME={HOSTNAME};PORT={PORT};PROTOCOL=TCPIP;
UID={USER_NAME};PWD={PASSWORD};", "", "")
def select_all():
'''select multiple rows '''
sql = 'SELECT * FROM table'
try :
stmt = ibm_db.exec_immediate(conn, sql)
row = ibm_db.fet_assoc(stmt)
while row :
print(row)
row = ibm_db.fetch_assoc(stmt)
except : print(f'error occured. {ibm_db.stmt_errormsg()}')
finally :
conn.close()
def select_specific(condition):
'''select row where condition = condition'''
#using prepared-statement!
sql = 'SELECT * FROM table WHERE condition = ? '
try :
stmt = ibm_db.prepare(conn, sql)
# option 1 : Explicitly bind parameters
ibm_db.bind_param(stmt, 1, condition)
ibm_db.execute(stmt)
# option 2 : Invoke Prepared Statement again using dynamically bound parameters.
param = condition
ibm_db.execute(stmt, param)
except : print(f'error occured. {ibm_db.stmt_errormsg()}')
finally :
conn.close()
'AI 이론과 개발의 혼재 > Python' 카테고리의 다른 글
Python 에러잡기 : [SSL: CERTIFICATE_VERIFY_FAILED] (3) | 2020.06.02 |
---|---|
Python - MySQL (PyMySQL 설치, 기본 사용법 CRUD) (0) | 2020.04.23 |
Anaconda, TensorFlow 설치 (0) | 2020.01.29 |
Django. 기존DB 재사용! Django로 Migration하기 (1) | 2018.08.08 |
MariaDB 외부에서 접속/접근 방법 (0) | 2018.08.08 |
댓글