BACK END/Python

4일(10.07) DB

라미보 2022. 10. 7. 15:45

 

 

 

실행전 파이썬DB cx_Oracle 설치를 해야한다.

설치방법!

 

 

 

 

 

command to execute에 내용을 install cx_Oracle 이라고 변경하고 run을 누른다.

 

 

 

run을 누르고 아래와같이 뜨면 close한다.

 

 

 

close를 누르면 이 창이 다시 뜨는데, python을 클릭하면 loading이 되었다가 스크롤을 내려보면 cx_oracle이 설치 되어있음을 확인할 수 있다. 

되고 cx_Oracle이 있는지 확인하면 apply close한다 

 

 

 

 

 

📌 명령 프롬프트에서 설치하는 방법도 있다!

 

명령프롬프트에서
c:\Users\admin>pip install cx_Oracle 

라고 입력하여서 설치할 수 있다.

 

명령프롬프트(cmd)에서 설치하는것이 정확하다고 할 수 있다

 

 

 

 

 

💻 11_DB

💾 Ex01

 

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

@author: admin
'''

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

#파이썬에서 하는 방법
#
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'
cur.execute(drop) 
#참조변수 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)   
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() #더이상 할일이 없으면 접속을 종료한다.

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

 

 

✔ 자바에서 DB 실행하는 방법

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

 


✔ 파이썬에서 하는 방법

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'
cur.execute(drop) 
#참조변수 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)   
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() #더이상 할일이 없으면 접속을 종료한다.

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

 

 

 

 

 

 

 

 

 

 

 

 

💾 Ex02

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

@author: admin
'''

#시퀀스 테이블 생성
'''
emplseq

SQL> desc employee;
 이름                                      널?      유형
 ----------------------------------------- -------- ----------------------------
 NUM                                       NOT NULL NUMBER
 ID                                                 VARCHAR2(10)
 PART                                               VARCHAR2(10)
 POSITION                                           VARCHAR2(10)
 SALARY  
                                            NUMBER
id입력:kim
part입력:영업부
position입력:과장
salary입력:aa
salary는 숫자로 입력하세요
salary입력:1000
계속?y
id입력:park
part입력:홍보부
position입력:대리
salary입력:2000
계속?n
select * from employee 결과
(1, 'kim', '영업부', '과장', 1000)
(2, 'park', '홍보부', '대리', 2000)
'''


import cx_Oracle

con = cx_Oracle.connect("jspid/jsppw@localhost:1521/orcl")
cur = con.cursor()
print(type(cur))

#테이블 삭제
drop = 'drop table employee'
cur.execute(drop)

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

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

#테이블 생성
create = ''' create table employee(
            num number primary key,
            id varchar2(20),
            part varchar2(20),
            position varchar2(20),
            salary number
    )
'''
cur.execute(create)
print('------------------------')


#입력하기 , 반복문 돌리면서 예외처리도 해줘야 한다
        
while True :
    id = input('id입력:')
    part = input('part입력:')
    position = input('position입력:')
    
    while True:
        try :
            salary = int(input('salary입력:'))
        except ValueError :
            print('salary는 숫자로 입력하세요')
            continue
        else :
            break
    
    insert = "insert into employee values(empseq.nextval,'"+id+"','"+part+"','"+position+"','"+str(salary)+"')"
    cur.execute(insert)
    con.commit()
        
    yesno = input('계속?')
    if yesno == 'n' :
        break

cur.execute('select * from employee')
print('select * from employee 결과')
for row in cur:
    print(row)

 

 

 

 

#시퀀스 테이블 생성 후 입력받아서 출력해보기

시퀀스 : emplseq

SQL> desc employee;
 이름                                      널?      유형
 ----------------------------------------- -------- ----------------------------
 NUM                                       NOT NULL NUMBER
 ID                                                 VARCHAR2(10)
 PART                                               VARCHAR2(10)
 POSITION                                           VARCHAR2(10)
 SALARY  
                                            NUMBER
id입력:kim
part입력:영업부
position입력:과장
salary입력:aa
salary는 숫자로 입력하세요
salary입력:1000
계속?y
id입력:park
part입력:홍보부
position입력:대리
salary입력:2000
계속?n
select * from employee 결과
(1, 'kim', '영업부', '과장', 1000)
(2, 'park', '홍보부', '대리', 2000)

 

 

 

 

import cx_Oracle   - 모듈을 가져온다

con = cx_Oracle.connect("jspid/jsppw@localhost:1521/orcl")  - 계정접속
cur = con.cursor()
print(type(cur))

#테이블 삭제
drop = 'drop table employee'
cur.execute(drop)

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

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

#테이블 생성
create = ''' create table employee(
            num number primary key,
            id varchar2(20),
            part varchar2(20),
            position varchar2(20),
            salary number
    )
'''
cur.execute(create)
print('------------------------')


#입력하기 , 반복문 돌리면서 예외처리도 해줘야 한다
        
while True :
    id = input('id입력:')
    part = input('part입력:')
    position = input('position입력:')
    
    while True:
        try :
            salary = int(input('salary입력:'))
        except ValueError :
            print('salary는 숫자로 입력하세요')
            continue
        else :
            break
    
    insert = "insert into employee values(emplseq.nextval,'"+id+"','"+part+"','"+position+"','"+str(salary)+"')"
    cur.execute(insert)
    con.commit()
        
    yesno = input('계속?')
    if yesno == 'n' :
        break

cur.execute('select * from employee')
print('select * from employee 결과')
for row in cur:
    print(row)