"""
oracle_config.py
Oracle 데이터베이스 서버에 접속(로그인)하기 위해 필요한 정보들을 정의
"""
# 사용자 이름
user = 'scott'
# 비밀번호
pwd = 'tiger'
# 데이터베이스 서버 주소: DSN(Data Source Name)
dsn = 'localhost:1521/orcl'
>>Oracle 데이터베이스 서버에서 select 구문 실행, 결과 확인
현재 프로젝트 디렉토리 상태
# 사용자가 입력한 문자열에 따옴표(')나 큰따옴표(")가 포함되어 있는 경우
# SQL 에러가 발생할 수 있으므로 권장되지 않음.
# -> Data Binding 방법을 권장.
import cx_Oracle
import lec08_database.oracle_config as cfg
with cx_Oracle.connect(cfg.user, cfg.pwd, cfg.dsn) as connection:
with connection.cursor() as cursor:
deptno = int(input('부서 번호 입력>> '))
dname = input('부서 이름 입력>> ')
loc = input('부서 위치 입력>> ')
데이터 바인딩은 파이썬의 언어가 아닌 다른 언어의 방식으로 값을 삽입하는 것으로, DB 프로그램에 따라 조금씩 차이가 있다.
Oracle DB의 경우 콜론 ':' 을 사용한다.
방법 1
sql1 = 'insert into dept2 values (:0, :1, :2)' # 컬럼 index [0], [1], [2]
cursor.execute(sql1, [deptno, dname, loc]) # >> data binding
connection.commit()
방법 2
sql2 = 'insert into dept2 values (:dept_no, :dept_name, :loc)'
cursor.execute(sql2, dept_no = deptno, dept_name = dname, loc = loc)
connection.commit()
exercise)
수정할 deptno, 수정할 loc를 입력받아서 loc만 변경 update
import cx_Oracle
import lec08_database.oracle_config as cfg
with cx_Oracle.connect(cfg.user, cfg.pwd, cfg.dsn) as connection:
with connection.cursor() as cursor:
deptno = int(input('변경된 부서번호 입력: '))
loc = input('변경된 부서 위치 입력 :')
adjust_query = 'update dept2 set loc = :ad_loc where deptno = :ad_deptno'
cursor.execute(adjust_query, ad_loc = loc, ad_deptno = deptno)
connection.commit()
1) emp 테이블에서 부서번호를 입력 받아서 해당 부서의 사번, 이름, 부서번호 출력
2) emp 테이블에서 이름을 입력 받아서, 해당 글자가 포함된 직원들의 사번, 이름, 급여를 출력
with cx_Oracle.connect(cfg.user, cfg.pwd, cfg.dsn) as connection:
with connection.cursor() as cursor:
deptno = int(input('부서 번호 입력>> '))
sql1 = 'select empno, ename, deptno from emp where deptno = :p_deptno'
cursor.execute(sql1, p_deptno=deptno)
connection.commit()
for empno, ename, deptno in cursor:
print(empno, ename, deptno)
with cx_Oracle.connect(cfg.user, cfg.pwd, cfg.dsn) as connection:
with connection.cursor() as cursor:
ename = '%'+input('사원 이름을 입력>> ')+'%'
sql2 = "select empno, ename, sal from emp where upper(ename) like upper(:p_ename)"
cursor.execute(sql2, p_ename=ename)
for empno, ename, sal in cursor:
print(empno, ename, sal)