나를 비롯한 팀원들 모두의 끊임없는 디버깅..디버깅..리팩토링...
일주일간 머리빠져라 반복하고 이 프로젝트는 얼추 마무리된줄 알았는데...
주말 쉬고왔더니 새로운 과제가 생겼다 ^-^
우리의 파이썬 프로그램을 실행하면서 발생하는 데이터들을 오라클 DB에 저장해보려고 한다.
여러명이 한 DB계정에 접근해야 하기 때문에 Cloud DB를 사용했다.
파이썬에서 oracle 데이터베이스에 접근하기 위해서는 window 운영체제에서 오라클 데이터베이스에 연결해주는 dll 파일이 필요한데, 이때 사용하는 것이 Oracle Instant Client 라고 한다.
https://www.oracle.com/database/technologies/instant-client/downloads.html
위 링크로 들어가서 자신의 운영체제에 맞는 파일을 다운로드한다.
다운받아진 instantclient_19_11 폴더 내에 network폴더, 또 그 안에 admin 폴더를 생성해주었다.
그리고 admin 폴더 안에 클라우드 DB 계정을 만들면서 다운받아뒀던 전자지갑 파일을 복사해서 압축해제하고 넣어줬다.
cmd창을 켜고,
pip install cx_oracle
를 입력하여 cx_oracle 모듈을 설치해준다.
쭉 설치가 되다가 중간에 Proceed ([y]/n)?
가 나오면 y를 눌러서 계속 진행한다.
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
마지막에 이렇게 3줄이 나오면 설치 성공!
이제 준비가 다 되었으니 자신이 사용하는 편집기로 파이썬 파일을 열어서 잘 연결되는지 테스트해본다.
import cx_Oracle
cx_Oracle.init_oracle_client(lib_dir=r"C:\management\oraclework\instantclient_19_11")
# 본인이 Instant Client 넣어놓은 경로를 입력해준다
connection = cx_Oracle.connect(user='myusername', password='mypassword', dsn='mydb_high')
# 본인이 접속할 오라클 클라우드 DB 사용자이름, 비밀번호, dsn을 넣어준다.
dsn에 넣어줄 값은
오라클 전자지갑 안에 있는 파일 중 tnsnames
라는 이름의 파일을 메모장을 통해 열어보면 맨 앞에 나와있다.
나는 만들었던 클라우드 DB 이름이 mydb라서 mydb_high
를 넣어주었다.
여기까지 하면 내 파이썬 파일과 오라클 DB가 연결된다 👏👏👏
이제 자유자재로 파이썬 파일에서 sql문을 사용해보자!
import cx_Oracle
cx_Oracle.init_oracle_client(lib_dir=r"C:\management\oraclework\instantclient_19_11")
connection = cx_Oracle.connect(user='myusername', password='mypassword', dsn='mydb_high')
# 커서 생성
cursor = connection.cursor()
# pytab 테이블 생성
cursor.execute("create table pytab (id number, data varchar2(20))")
# 테이블에 데이터 삽입
rows = [ (1, "First" ),
(2, "Second" ),
(3, "Third" ),
(4, "Fourth" ),
(5, "Fifth" ),
(6, "Sixth" ),
(7, "Seventh" ) ]
cursor.executemany("insert into pytab (id, data) values (:1, :2)", rows)
# 변경사항 commit
connection.commit()
# 커서, connection 종료
cursor.close()
connection.close()
위와 같이 파이썬 파일에서 실행을 시켜준 후 (실행을 꼭 잘시켜줘야함!), sqldeveloper에 접속해 데이터가 잘 들어갔는지 확인해본다.
SELECT * FROM PYTAB;
무사히 완료 :) :)
지금까지 우리 조가 구현한 파이썬 봇의 기능 대부분은 사용자에게 선택지를 주고, 사용자가 그 중에서 선택하면 그에 맞는 정보를 출력해주는 식이었다.
그래서 사용자가 그닥 저장할 만한 유의미한 데이터를 남기지 않아서.. 약간씩 기능을 추가해보기로 했다 ^_ㅠ
완성 코드는.. to be continued...