본문 바로가기
수업(국비지원)/Python

[Python] sqlite - 파이썬 db , 파이썬 Oracle 접속

by byeolsub 2023. 4. 24.
'''
   csv, 엑셀파일 => 표(테이블, 그리드) 형태 데이터
                   행과 열로 이루어진 데이터
         => pandas 모듈을 이용하여 표 형태의 데이터로 처리.
            DataFrame 형식으로 처리함. (R프로그램과 유사)          
'''
sqlite : 파이썬 내부에 존재하는 데이터 베이스
<https://sqlitebrowser.org/dl/>
windows-64비트용 zip다운받기
c:\\압축풀기

 

📌

'''
    drop table if exists items; => items 테이블이 존재하면 테이블 삭제. 
   => items 테이블 생성
       item_id integer primary key : itme_is 컬럼이 숫자형 기본키. 값이 자동 증가
       name text unique : 문자형 데이터. 중복불가 
    create table items (item_id integer primary key,
           name text unique, price integer);
   => insert 구문 실행
   => item_id 컬럼을 제외 : 값이 자동 증가되기 때문에    
    insert into items (name,price) values ('Apple',800);
    insert into items (name,price) values ('Orange',500);
    insert into items (name,price) values ('Banana',300);
'''
import sqlite3 
dbpath = "test.sqlite" # sqlite db의 파일 이름. 
conn = sqlite3.connect(dbpath) # 데이터베이스 연결.(접속) 
cur = conn.cursor() # sql 구문을 실행 할 수 있는 객체 
# executescript : 여러개의 sql 문장을 실행.
#                 각각의 문장들은 ; 으로 구분됨
cur.executescript("""
    drop table if exists items;
    create table items (item_id integer primary key,
           name text unique, price integer);
    insert into items (name,price) values ('Apple',800);
    insert into items (name,price) values ('Orange',500);
    insert into items (name,price) values ('Banana',300);                    
""")
conn.commit()

 

 📌

# 데이터 읽기 
cur = conn.cursor() # 문장 실행 객체

# execute : sql 명령문 실행 
cur.execute("select * from items")

# fetchall() : select 결과 전부를 리스트로 전달
item_list = cur.fetchall()
print(item_list) # 하나의 레코드에 튜블의 형태로 저장됨. 
#                  [(컬럼값1,컬럼값2,...),(),()]
# 반복문으로 조회
for id,name,price in item_list :
    print(id,name,price)

'''
문제 : mydb sqlite 데이터 베이스 생성
        mydb에 member 테이블 생성하기
        id char(4) primary key, name char(15), email char(20) 인
        컬럼을 가진다.
'''
#1
conn = sqlite3.connect("mydb") #or mydb.sqlite
cur = conn.cursor()
cur.execute("create table member\\ #멤버테이블 만들기
 (id char(4) primary key,name char(4), email char(20));")

#2
conn = sqlite3.connect("mydb") #or mydb.sqlite
cur = conn.cursor() # 문장 실행 객체
cur.execute("select * from member")
member_list = cur.fetchall() # 조회된 결과를 모두 리스트로 리턴
for m in member_list :
    print(m[0],m[1],m[2])
conn.close()

 📌

# 화면에서 id,이름,이메일을 입력받아서 db에 등록하기
#1
while True :
    d1 = input("사용자 ID : ") # 사용자 아이디
    if d1 == '' :
        break
    d2 = input("사용자 이름 : ") # 이름
    d3 = input("이메일 : ") # 이메일
    sql = "insert into member (id,name,email) values \\
        ('" + d1 +"','"+ d2 +"','"+ d3 +"')"
    print(sql)
    cur.execute(sql) # 실행
    conn.commit()
conn.close() # 데이터 베이스와 연결 종료. 실행시 다시 연결 필요.

#2 파라미터 이용하여 데이터 추가하기 
conn = sqlite3.connect("mydb")  #or mydb.sqlite
cur = conn.cursor()
while True :
    param=[] #?의 파라미터 값 사용
    d1 = input("사용자 ID : ") # 사용자 아이디
    if d1 == '' :
        break
    d2 = input("사용자 이름 : ") # 이름
    d3 = input("이메일 : ") # 이메일
    sql = "insert into member (id,name,email) values (?,?,?)"
    param.append(d1) #첫번째 등록. 첫번째?의 값
    param.append(d2) #두번째 등록. 두번째?의 값
    param.append(d3) #세번째 등록. 세번째?의 값
    cur.execute(sql,param) # 실행  
    #execute는 물음표가있으면 물음표에 맞추어 순서대로반복
    conn.commit()
conn.close() # 데이터 베이스와 연결 종료. 실행시 다시 연결 필요.

❓ #문제 : member 테이블의 내용을 출력하기

#3fetchoone 함수로 읽기 까지의 출력

*주의

1.“mydb”로만들었으면 “mydb로 “mydb.sqlite”로 만들었으면 “mydb.sqlite”로 써야함.

#1
conn = sqlite3.connect("mydb.sqlite")  #or mydb
cur = conn.cursor() # 문장 실행 객체
cur.execute("select * from member")
member_list = cur.fetchall() #조회결과 member_list리스트로 리턴
print(member_list) #or memlist
#2 반복문으로 조회
for id,name,email in member_list :
    print(id,name,email)

#1-2
conn = sqlite3.connect("mydb") #mydb에 경로 연결. #or mydb.sqlite
cur = conn.cursor() # 문장 실행 객체
cur.execute("select * from member") #멤버테이블 찾기
memlist = cur.fetchall() #조회결과 memlist리스트로 리턴
print(memlist)  #or member_list
#2-2 반복문으로 조회
for m in memlist :  #or member_list
		print(m)
conn.close()

#3 fetchone 함수로 읽기
conn = sqlite3.connect("mydb") #or "mydb.sqlite"
cur.execute("select * from member") 
while True :
    row = cur.fetchone()
    if row == None:
        break
    print(row)
conn.close()

# executemany() : 여러개의 데이터를 한번에 추가하기
data = [('test3','테스트3','test3@aaa.bbb'), #내 경우 처음에 에러떴는데, 
        ('test4','테스트4','test4@aaa.bbb'), #UNIQUE constraint failed: member.id 
        ('test5','테스트5','test5@aaa.bbb'), #테스트3 먼저 만들어서 존재한다는 얘기.
        ('test6','테스트6','test6@aaa.bbb')]
conn = sqlite3.connect("mydb.sqlite")
cur = conn.cursor()
cur.executemany("insert into member (id,name,email) values (?,?,?)",\\
                data)
conn.commit()
conn.close()

# db 내용 수정하기
conn = sqlite3.connect("mydb.sqlite")
cur = conn.cursor()

param = []
param.append("hongkd@aaa.bbb")
param.append("hongkd")
cur.execute("update member set email=? where id=?",param)
conn.commit()
conn.close()

# 이름이 테스트6 회원의 정보 삭제하기
conn = sqlite3.connect("mydb.sqlite")
cur = conn.cursor()

param = []
param.append("테스트6")
cur.execute("delete from member where name=?",param)
conn.commit()
conn.close()

📌

#오라클 데이터 베이스에 접속하기
#오라클 모듈을 설정해야함
#pip install cx_Oracle
#pip install : 외부모듈을 설정하는 명령어. 파이선 console에서 실행

pip install cx_Oracle 콘솔에 실행했을때

import cx_Oracle #오라클 접속을 위한 모듈. 기본설정 아님

#connect('사용자아이디','비밀번호','서버IP/SID')
conn = cx_Oracle.connect('kic','1234','localhost/xe')
cur = conn.cursor() #sql 명령 객체

cur.execute("select * from student")
st_list = cur.fetchall()
for st in st_list :
	print(st)
conn.close

 

  • Oracle 접속

📌

# 오라클 db에 접속하기
# 오라클 모듈 설정해야함
# pip install cx_Oracle
# pip install : 외부 모듈을 설정하는 명령어. console에서 실행
import cx_Oracle  # 오라클 접속을 위한 모듈.
# connect("사용자 아이디","비밀번호","서버IP/SID")
conn = cx_Oracle.connect('kic','1234','localhost/xe')
cur = conn.cursor() # sql 명령 객체

cur.execute("select * from student")
st_list = cur.fetchall()
for st in st_list :
    print(st)
conn.close()

'''
 문제 : 학생테이블에 
        학번(studno) : 5555, 이름(name) : 파이썬, 학년(grade) : 5,     
         id : test1, jumin : 9001011234567
         데이터 추가하기
'''
#1
import cx_Oracle
conn = cx_Oracle.connect('kic','1234','localhost/xe')
cur = conn.cursor() #sql 명령 객체

#컬럼명 대문자로 했지만 소문자로 넣어도 상관없음.
sql = "insert into student (STUDNO, NAME, GRADE, ID, JUMIN)\\
			values(:STUDNO,:NAME,:GRADE,:ID,:JUMIN)"
cur.execute(sql,\\
						studno = 5555, name = '파이썬', grade = 5,
				    id = 'test1', jumin = '9001011234567')
conn.commit()

#dictionary객체
param = {"studno":5556,"name":'파이썬2',"grade":5,
					"id":'test2',"jumin":'9001011234567'}
param = {"studno":5557,"name":'파이썬3',"grade":5,
					"id":'test3',"jumin":'9001011234567'}
cur.execute(sql,param) #sql형식과 param값 추가하는 명령문

#데이터 잘들어갔는지 확인하기위해서 다시 커밋
conn.commit()

#조회 출력
cur.execute("select * from student where grade=5")
st_list = cur.fetchall()
for st in st_list :
	print(st)
conn.close

 

 

'수업(국비지원) > Python' 카테고리의 다른 글

[Python] Pandas - 기술 통계  (0) 2023.04.25
[Python] Pandas  (0) 2023.04.25
[Python] 파일 정보 조회  (0) 2023.04.24
[Python] 파일 읽기  (0) 2023.04.24
[Python] 추상 함수, 모듈  (0) 2023.04.24