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() # 데이터베이스 연결 해제
- 결과 :
반응형
'[개발] DataBase Tool SAP > 8. 파이썬' 카테고리의 다른 글
[Part 11] 네이버 이미지 수집 (0) | 2023.06.27 |
---|---|
[Part 11] 웹데이터 수집 - bs4 (0) | 2023.06.26 |
[Part 10] 검색자동화 구현하기 (0) | 2023.06.23 |
[Part 9] 데이터 수집과 웹구조 (0) | 2023.06.21 |
[Part 8] 예외처리 (0) | 2023.06.20 |