728x90
반응형

oracledb 라이브러리

: python으로 Oracle DB에 연결해서 DB작업을 할 수 있도록 도와주는 라이브러리
!pip install oracledb   # oracledb 라이브러리 설치하기
import oracledb         # oracledb 라이브러리 임포트(불러오기)

1. 업무 DB에 연결

con = oracledb.connect(user="사용자이름", password="비밀번호", dsn="호스트이름:port/SID")   # DB에 연결 (호스트이름 대신 IP주소 가능)
cursor = con.cursor()   # 연결된 DB 지시자(커서) 생성
  • dsn(데이터베이스 소스 이름)
    • 호스트 이름 또는 IP 주소 부분이 localhost 일 경우: 자체 시스템, 즉 현재 시스템에 있는 작업 DB를 가리킴
    • 포트번호 : DB 서버의 기본 포트번호는 1521입니다.

2. DB작업

cursor.execute("SQL문장")       # DB 명령 실행 (cursor가 임시 보관)
out_data = cursor.fetchall()   # cursor가 임시 보관한 내용을 out_data에 저장 (결과는 리스트)
# out_data 내용 출력해보기
for record in ou_data :
	print(record)
  • 여러 개의 함수를 실행하고 후, fetchall()로 한 번에 생성 가능
    • fetchone: 하나님께
    • fetchall: 여러 개가 왔어요 (결과는리스트!)
  • 커서 내용을 저장하여 출력하고 select문처럼 데이터가 조회되는 경우에만(sql 실행 시 반환되는 결과만 있을 경우에만) 내용이 저장됨
  • 주의할 점 : DML 작업을 실행했을 경우, commit을 실행하여 DB에 적용하게 되었습니다!

3. DB 연결 휴가

con.close()   # DB 연결 해제

사용예시

con = oracledb.connect(user="system", password="oracle", dsn="localhost:1521/XEPDB1") # 데이터베이스에 연결
cursor = con.cursor() # 연결된 데이터베이스 지시자 생성

print('데이터베이스 연결 성공~!!!')

# 1. emp테이블의 내용 확인
cursor.execute("select * from emp") # 데이터베이스 명령 실행( cursor가 임시로 보관)
out_data = cursor.fetchall() # 커서의 내용을 out_data에 저장 
for record in out_data: # out_data의 내용을 출력
    print(record)
print('-'*50)

# 2. dept테이블에 2개의 레코드를 삽입 후 승인
cursor.execute("insert into dept values(50, 'DEVELOPER','LA')")
cursor.execute("insert into dept values(60, 'DEVELOPER','ATL')")
cursor.execute('commit') # sqldeveloper에 커밋
cursor.execute("select * from dept")
out_data2 = cursor.fetchall()
for record in out_data2:
    print(record)
print('-'*50)
    
# 3. dept 테이블에서 dname이 "DEVELOPER"인 레코드 삭제 후 승인
cursor.execute("delete from dept where dname = 'DEVELOPER'")
cursor.execute("commit")
cursor.execute("select * from dept")
out_data2 = cursor.fetchall()
for record in out_data2:
    print(record)
print('-'*50)

# 4. emp 테이블과 dept 테이블을 inner join 수행
cursor.execute("select e.empno, e.ename, e.mgr, d.deptno, d.dname from emp e, dept d where e.deptno = d.deptno")
out_data = cursor.fetchall()
for record in out_data:
    print(record)
print('-'*50)

# 5. dept테이블의 구조와 내용을 이용하여 dept_ddl 테이블을 생성하시오. (단, create와 select를 활용하시오.)
cursor.execute("create table dept_ddl as select * from dept")
cursor.execute("select * from dept_ddl")
out_data = cursor.fetchall()
for record in out_data:
    print(record)
print('-'*50)

con.close() # 데이터베이스 연결 해제
  • 결과 :
728x90
반응형

/*--------------------------------------------------------------------- 
   Json Rest API
 ---------------------------------------------------------------------*/
OleObject lole_SrvHTTP
String ls_status, ls_response, ls_arg, ls_url
ls_arg = '{ "USER_NM": "xxxxxxx@xxxx.co.kr"}}'
ls_url = 'https://nexthr-apix.singlex.com/nexthr/hr-xmti/dev/xmti/v1/gw/org/LG01'
lole_SrvHTTP = CREATE  OleObject
lole_SrvHTTP.connectToNewObject("MSXML2.ServerXMLHTTP.6.0")
lole_SrvHTTP.Open('POST', ls_url, FALSE)
lole_SrvHTTP.SetRequestHeader( "Content-Type", "application/json")
lole_SrvHTTP.SetRequestHeader( "x-apikey", "xxxxxxxxxxxx")
lole_SrvHTTP.setOption(2,'13056') 
lole_SrvHTTP.send(ls_arg)
ls_status   = string(lole_SrvHTTP.Status)
ls_response = string(lole_SrvHTTP.ResponseText)
/*------------------------------------------------------------------------------------
  Datawindow로 자료 생성 
--------------------------------------------------------------------------------------*/
Reset()
long    p1, p2, row
string  ls_json, ls_Row[], ls_Cdata, item 
string  ls_Cols[]={"RSLTDT","HR_ORG_CD","PARENT_HR_ORG_CD","ORG_NM","ENG_ORG_NM","ORG_SORT","LCTN_CD","MGR_EMP_NO","DEPT_USEYN","LEVEL","PATH_HR_ORG_CD","PATH_ORG_NM","PATH_ENG_ORG_NM","PARENT_ORG_NM","PARENT_ENG_ORG_NM","MGR_EMP_NM"}
integer i, i_max, j, j_max
ls_json = of_replace(ls_response,'[','')
ls_json = Trim( of_replace(ls_json,']','') )
messagebox("확인",ls_json)
/*------------------------------------------------------------------------------------
  구분자로 되어 있는 String -> String Array
i_max = StringToArray( ls_json, '},', ls_Row[])
--------------------------------------------------------------------------------------*/
DO WHILE ls_json <> '' 
   item = Trim ( f_getfirstitem( ls_json, '},' )  )
   IF item = '' THEN 
   ELSE 
      i_max ++ 
      ls_Row[i_max] = item 
   END IF 
LOOP 
/*------------------------------------------------------------------------------------
  Datawindow 에 자료 추가 
--------------------------------------------------------------------------------------*/
j_max = UpperBound(ls_Cols[])
FOR i = 1 TO i_max
   ls_Row[i] = of_replace(ls_Row[i],'{'   ,'')
   ls_Row[i] = of_replace(ls_Row[i],'}'   ,'')
   ls_Row[i] = of_replace(ls_Row[i],'~r~n','')
   ls_Row[i] = of_replace(ls_Row[i],',"'  ,'^')
   ls_Row[i] = of_replace(ls_Row[i],'"'   ,'') + '^'
   
   row = Insertrow( 0 )
   FOR j = 1 TO j_max 
      // Column data  
      p1    = Pos( ls_Row[i], ls_Cols[j] )
      p2    = Pos( ls_Row[i], '^', p1 )
      ls_Cdata = Mid( ls_Row[i], p1, p2 - p1 )
      f_getfirstitem( ls_Cdata, ':' )  // ls_Cdata = Trim( f_nth(ls_Cdata,':',2) )
      ls_Cdata = Trim( of_replace(ls_Cdata,',','') )
      CHOOSE CASE j
         CASE 1
            CHOOSE CASE ls_Cdata
               case '1' ; Setitem(row, j, '성공')
               case '2' ; Setitem(row, j, 'Data코드오류')
               case '3' ; Setitem(row, j, '인증코드오류')
               case '4' ; Setitem(row, j, '일일제한횟수마감')
            end choose
         CASE 7, 11 //number
            Setitem(row, j, integer(ls_Cdata))
         CASE 2, 3     //char
            Setitem(row, j, ls_Cdata)
         CASE ELSE     //decimal
            Setitem(row, j, Dec(ls_Cdata))
      END CHOOSE
   NEXT 
NEXT 
Sort()
DESTROY lole_SrvHTTP


lole_SrvHTTP.setOption(2,'13056') //  https 연동시 ssl 인증서가 정상 설치 되지 않은 경우 인증서 무시 옵션

lole_SrvHTTP.send(ls_arg)
ls_status   = string(lole_SrvHTTP.Status)
ls_response = string(lole_SrvHTTP.ResponseText)
DESTROY lole_SrvHTTP


이거 없으면 연동 안됨.



728x90
반응형

728x90
반응형

 

 

 

728x90
반응형

 

 

728x90
반응형

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

 

 

728x90
반응형

 

 

 

 

 

 

+ Recent posts