5일(10.11) 예외처리과제풀이, DB예외처리
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()