본문 바로가기

Python

Python - Database

### db에 데이터 처리하기 
# sqlite db 사용하기 
# sqlite : 파이썬 내부에 존재하는 dbms

import sqlite3

dbpath = "test.sqlite" #데이터베이스파일
conn = sqlite3.connect(dbpath) #dbpath파일에 데이터 저장
cur = conn.cursor() #sql구문 실행하기 위한 객체
#executescript : 여러개의 문장을 실
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 sql문장 실행 완료
cur = conn.cursor() #sql구문 실행하기 위한 객체 
# execute : 한개의 sql 구문 실행 
cur.execute("select * from items")
# cur.fetchall() : cur 실행 후의 결과 값을 모두 리턴
# item_list : select * from items 실행 후의 결과를 저장하고 있는 리스트 
item_list = cur.fetchall()
print(item_list)
print(type(item_list))

for item_id,name,price in item_list :
    print(item_id,name,price)
    
for item in item_list :
    print(item[0],item[1],item[2])

# 레코드 한개씩 조회
cur = conn.cursor() #sql 구문 실행하기 위한 객체
cur.execute("select * from items")
while True :
    row = cur.fetchone()
    if row == None :
        break;
    print(row[0],row[1],row[2])
    
# 레코드 추가하기 
sql = "insert into items (name,price) values ('Peach',3000)"
cur = conn.cursor() #sql 구문 실행하기 위한 객체
cur.execute(sql)
conn.commit()

cur = conn.cursor()
cur.execute("select *  from items")
item_list = cur.fetchall()
print(item_list)
conn.close()

# iddb sqlite db를 생성하기 
conn = sqlite3.connect("iddb")

# 'iddb' db에 이름이 usertable인 테이블 생성하기
# id char(4) primary key, username char(15), email char(15),
# birthyear int) 컬럼을 가진 usertable 생성하기
cur = conn.cursor()
cur.executescript('''
   drop table if exists usertable;
   create table usertable (id char(4) primary key,
     username char(15), email char(15), birthyear int);
''')

# 화면에서 사용자ID, 이름, 이메일, 출생년도를 입력받아서 usertalbe에 추가하기
conn = sqlite3.connect(dbpath) 
cur = conn.cursor()
 

while True :
    d1 = input("사용자ID=>")
    if d1 == '':
        break
    d2 = input("사용자이름=>")
    d3 = input("이메일=>")
    d4 = input("출생년도=>")


# insert into usertable values ('test2',테스트2,'test@aaa.bbb',1991)
    sql = "insert into usertable values ('"+d1+"','"+d2+"','"+d3+"','"+d4+"')"
    print(sql)
    cur.execute(sql)
    conn.commit()
conn.close() #database와 접속 종료 

# usertable의 데이터를 조회하여 화면 출력하기
conn = sqlite3.connect("iddb")
cur = conn.cursor()
cur.execute("select * from usertable")
user_list = cur.fetchall()
for u in user_list : 
    print(u)
conn.close()

# 화면에서 사용자ID, 이름, 이메일, 출생년도를 입력받아서 usertalbe에 추가하기
conn = sqlite3.connect("iddb") 
cur = conn.cursor()
while True :
    param = []
    d1 = input("사용자ID=>")
    if d1 =='':
        break
    d2 = input("사용자이름=>")
    d3 = input("이메일=>")
    d4 = int(input("출생년도=>"))
    sql = "insert into usertable values (?,?,?,?)"
    param.append(d1)
    param.append(d2)
    param.append(d3)
    param.append(d4)
    cur.execute(sql,param)
    conn.commit()
conn.close() #database와 접속 종료 

# usertable의 데이터를 조회하여 화면 출력하기
conn = sqlite3.connect("iddb")
cur = conn.cursor()
cur.execute("select * from usertable")
user_list = cur.fetchall()
for u in user_list : 
    print(u)
conn.close()

#
data = [('test4','테스트4','test4@aaa.bbb',1991),
        ('test5','테스트5','test5@aaa.bbb',1993),
        ('test6','테스트6','test6@aaa.bbb',1994),
        ('test7','테스트7','test7@aaa.bbb',1995)]

# data : 리스트 
con = sqlite3.connect("iddb")
cur = con.cursor()
cur.executemany("""insert into usertable 
    (id,username,email,birthyear) values (?,?,?,?)""",data)
con.commit();
conn.close()

# usertable의 데이터를 조회하여 화면 출력하기
conn = sqlite3.connect("iddb")
cur = conn.cursor()
cur.execute("select * from usertable")
user_list = cur.fetchall()
for u in user_list : 
    print(u)
conn.close()

# db에서 데이터를 삭제하기 
conn = sqlite3.connect("iddb")
cur = conn.cursor()
cur.execute("delete from usertable where id = 'test7'")
user_list = cur.fetchall()
for u in user_list : 
    print(u)
conn.close() #database와 접속 종료 


# db에서 데이터 수정하기
# test1 사용자의 출생년도 1992년 변경하기
conn = sqlite3.connect("iddb")
cur = conn.cursor()
cur.execute("update usertable set birthyear=1991 where id='test5'")
con.commit()

cur.execute("select * from usertable")
user_list = cur.fetchall()
for u in user_list : 
    print(u)
conn.close()

# db에서 데이터 1건만 조회하기
# test1 사용자 정보만 조회하기 
conn = sqlite3.connect("iddb") #close했으면 open 해야함
cur = conn.cursor()
cur.execute("select * from usertable where id='test1'")

# user con.close()= cur.fetchone()
# user = cur.fetchone()
# print(user)
id,name,email,year = cur.fetchone()
print("아이디:",id,",이름:",name,",이메일:",email,",출생년도:",year)
con.close()

# 오라클 접속하기
# 모듈 설정하기
pip install cx_Oracle : 외부 설정 모듈 셋팅 
import cx_Oracle #오라클 접속을 위한 모듈

# 오라클 서버와 접속 
# connect(오라클사용자id,오라클사용자비밀번호,오라클서버IP주소)
# 개별 아이피 주소 값 조회 방법 실행 - cmd - ipconfig 검색 - IPv4 값 : 172.30.1.8
# localhost : 내 컴퓨터 (아이피 값 대신 입력해도 좋다.)
# xe : 오라클 서버 아이디, SID : xe    orcl
conn = cx_Oracle.connect('kic','1234','172.30.1.8/xe')
cur = conn.cursor()
cur.execute("select * from student")

st_list = cur.fetchall()
for st in st_list :
    print(st)

# csv 파일 읽기 => 복사하기
# 파이썬에서 명령문에서 데이터를 입력받기
# jeju1.csv : 단어가 ,로 구분된 텍스트 파일 

with open("jeju1.csv","r",newline="",encoding="UTF8") as infp : #원본파일
   with open ("jeju1.bak.csv","w",encoding="UTF8") as outfp : #
       header = infp.readline()
       print(header)
       header = header.strip()
       header_list = header.split(",")
       outfp.write(",".join(map(str,header_list))+"\r\n")
       for row in infp : #입력 스트림에서 파일의 내용을 한줄씩 읽기
           outfp.write(row)




'Python' 카테고리의 다른 글

Python - xlsx,xls 파일 읽기 [openpyxl, pandas]  (0) 2021.06.21
Python - Database 연습문제  (0) 2021.06.21
Python - 클래스, 상속 연습문제  (0) 2021.06.17
Python - 모듈  (0) 2021.06.16
Python - Class  (0) 2021.06.16