BACK END/Python

5일(10.11) 예외처리과제풀이, DB예외처리

라미보 2022. 10. 11. 11:42

 

Q. 문제

예외처리를 해서 유효성검사하기

제목, 가격 예외처리 해줘야한다.

 

제목입력(3자~5자):abc
가격입력:1000
계속?y
제목입력(3자~5자):dd
제목입력(3자~5자)로 입력하세요
제목입력(3자~5자):sdsdfsdf
제목입력(3자~5자)로 입력하세요
제목입력(3자~5자):aaa
가격입력:sdfsdf
가격은 숫자로 입력하세요
가격입력:fdfsf
가격은 숫자로 입력하세요
가격입력:d
가격은 숫자로 입력하세요
가격입력:s
가격은 숫자로 입력하세요
가격입력:999
계속?y
제목입력(3자~5자):qqqq
가격입력:1234
계속?n
book: {'abc': 1000, 'aaa': 999, 'qqqq': 1234}
프로그램을 종료합니다.

 

 

 

#비어있는 사전만들기
book = {} # 키,값
while True:
    while True:
        try:
            title = input('제목입력(3자~5자):')
            if len(title)<3 or len(title)>5 :#타이틀의 길이를 구한다
                raise TypeError #강제로 에러를 일으키고싶을때, raise를 사용
        
        except TypeError:
            print('제목입력(3자~5자)로 입력하세요')
        
        else :
            break
        
    while True:   
        try:
            price = int(input('가격입력:'))
        except ValueError: #ValueError - 숫자로 바꿀수 없을때 발생하는 에러
            print('가격은 숫자로 입력하세요')
        else :
            book[title]=price
            break
        
    retry = input('계속?')
    if retry == 'n':
        break
print('book:', book)    
print('프로그램을 종료합니다.')

 

 

#비어있는 사전만들기
book = {} # 키,값
while True:
    while True:
        try:
            title = input('제목입력(3자~5자):')
            if len(title)<3 or len(title)>5 :#타이틀의 길이를 구한다
                raise TypeError #강제로 에러를 일으키고싶을때, raise를 사용
        
        except TypeError:
            print('제목입력(3자~5자)로 입력하세요')
        
        else :
            break
        
    while True:   
        try:
            price = int(input('가격입력:'))
        except ValueError: #ValueError - 숫자로 바꿀수 없을때 발생하는 에러
            print('가격은 숫자로 입력하세요')
        else :
            book[title]=price
            break
        
    retry = input('계속?')
    if retry == 'n':
        break
print('book:', book)    
print('프로그램을 종료합니다.')

 

 

 

 

💻 11_DB

💾 Ex01

#_*_coding:utf-8
'''
Created on 2022. 10. 7.

@author: admin
'''

#jar
#드라이버 로드
#계정에 접속
#sql문 작성, 분석
#실행
#접속 종료

#파이썬에서 하는 방법
from cx_Oracle import DatabaseError
import cx_Oracle  #파이썬에서 만든 모듈을 가져온다

con = cx_Oracle.connect("jspid/jsppw@localhost:1521/orcl") #계정접속
cur = con.cursor()
#저장소의 이름을 cur 라고 한다.
print(type(cur)) #<class 'cx_Oracle.Cursor'>

#테이블 삭제
drop = 'drop table person'
try :
    cur.execute(drop)
except cx_Oracle.DatabaseError : #cx_Oracle.DatabaseError =테이블이 없을때 뜨는에러
    print('테이블이 존재하지 않습니다.')
     
#참조변수 cur 로 drop있는것을 실행하라
#테이블이 없으면 에러가 발생

#시퀀스 삭제
dropseq = 'drop sequence perseq'
cur.execute(dropseq)

#시퀀스 생성
seq = 'create sequence perseq'
cur.execute(seq)

#테이블 생성
create = ''' create table person(
        num number primary key,
        id varchar2(10),
        name varchar2(10),
        addr varchar2(10)
    )        
'''
cur.execute(create)



#입력 insert
cur.execute('select * from person')
for row in cur:
    #cur가 반복대상 -select한 결과가 cur 에 담긴다.
    print(row) #row가 한줄한줄 출력된다
    
insert = "insert into person values(perseq.nextval,'kim','연아','부산')"
cur.execute(insert)

insert = "insert into person values(perseq.nextval,'song','중기','제주')"
cur.execute(insert)

insert = "insert into person values(perseq.nextval,'park','세리','인천')"
cur.execute(insert)

insert = "insert into person values(perseq.nextval,'hong','길동','원주')"
cur.execute(insert)  
   
con.commit() #커밋, 커밋을 안하면 콘솔창에는 보여지지만, 오라클에서 조회할때는 레코드 조회가 되지 않는다.

cur.execute('select * from person')
for row in cur:
    print(row)
    
    
#수정
update = "update person set name='제니' where id='kim'"
cur.execute(update)
con.commit()
print('------------------------')

cur.execute('select * from person')
for row in cur:
    print(row)
    
    
    
#삭제
delete = "delete person where id='song'"
cur.execute(delete)
con.commit()
print('------------------------')

cur.execute('select * from person')
for row in cur:
    print(row)
    
    
cur.close() #더이상 할일이 없으면 커서를 닫는다
con.close() #더이상 할일이 없으면 접속을 종료한다.

#콘솔에 결과가 튜플로 나온다. (튜플은 변경 불가, 리스트는 변경가능)

 

from cx_Oracle import DatabaseError

 

 

#테이블 삭제
drop = 'drop table person'
try :
    cur.execute(drop)
except cx_Oracle.DatabaseError : #cx_Oracle.DatabaseError =테이블이 없을때 뜨는에러
    print('테이블이 존재하지 않습니다.')

 

예외처리를해서 테이블이 존재하지 않아도 에러가 발생되지 않게 한다

 

 

 

 

 

 

 

💾 Ex_02

employee테이블에 insert한다.

 

 insert into employee
 values(emplseq.nextval,'park','영업부','과장',2000);

 insert into employee
 values(emplseq.nextval,'hong','개발부','대리',1000);

 insert into employee
 values(emplseq.nextval,'jung','홍보부','사원',8000);

 commit

 

 

 

 

 

💾 Ex_03

#_*_coding:utf-8
'''
Created on 2022. 10. 11.

@author: admin
'''
from matplotlib.pyplot import spring

'''
교집합 조인하기
SQL> select * from person;

       NUM ID     NAME                 ADDR
---------- ------ -------------------- --------------------
         1 kim    제니                 부산
         3 park   세리                 인천
         4 hong   길동                 원주

SQL> select * from employee;

       NUM ID     PART       POSITION       SALARY
---------- ------ ---------- ---------- ----------
         1 park   영업부     과장             2000
         2 hong   개발부     대리             1000
         3 jung   홍보부     사원             8000
         
결과         
park   세리  영업부     과장
hong   길동  개발부     대리
'''

#select pid, pname, eid, epart, eposition
#from person , employee
#where pid = eid;

import cx_Oracle #모듈
con = cx_Oracle.connect("jspid/jsppw@localhost:1521/orcl") #계쩡
cur = con.cursor() #커서

#조인하는 코드 -이너조인
select= """select p.id,p.name,e.part,e.position 
from person p inner join employee e 
on p.id=e.id"""

cur.execute(select)
print('결과:')
for row in cur:
    print(row)
    
cur.close()
con.close()

#자바 -db - jsp -spring 웹개발
#파이썬 - db -빅데이터분석- 시각화,차트로 만들기 , 머신러닝
#빅데이터는 정형화, 비정형화 되어있는것이 있다.
#정형
#비정형
#비정형을 정형화하여 빅데이터 분석

 

 

import cx_Oracle  #모듈
con = cx_Oracle.connect("jspid/jsppw@localhost:1521/orcl")  #계정
cur = con.cursor()  #커서

#조인하는 코드 -이너조인
select= """select p.id,p.name,e.part,e.position 
from person p inner join employee e 
on p.id=e.id"""

cur.execute(select)
print('결과:')
for row in cur:
    print(row)
    
cur.close()
con.close()