STUDY/Python

Python_[anaconda] 데이터 관리(2)

oort2 2023. 2. 20. 13:49

###엑셀파일 

 xlsx : openpyxl  모듈사용
   xls  : xlrd 모듈로 읽기
          xlwd 모듈로 쓰기

import openpyxl 
filename = "data/sales_2015.xlsx"
book = openpyxl.load_workbook(filename)

sheet = book.worksheets[0]
data=[]

for row in sheet.rows :
    line = []
    #print(row)
    #enumerate(row) : 목록에서 

    for l,d in enumerate(row) :    #  l : 인덱스 , d : 데이터. 셀의값
        line.append(d.value) #셀의내용을 line 추가
       print(line) #한 줄의 셀의 리스트
    data.append(line)
print()
print(data)    

### sqlite : 파이썬 내부에 존재하는 데이터 베이스

'''
https://sqlitebrowser.org/dl/
 windows-64비트용 zip sqlite browser 다운받기 ->  c:\ 압축풀기 =>  sql developer 임
'''

1.생성, 조회

import sqlite3
dbpath = "test.sqlite"                                                                    #database 파일 이름. 
conn = sqlite3.connect(dbpath)                                                   #데이터 베이스 접속.

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

cur.execute("select * from items")         #execute : sql 명령문 실행
item_list = cur.fetchall()                         #fetchall() : select 결과 전부를 리스트 전달
print(item_list) #[(컬럼값1,컬럼값2,..),(...),()]    #[(1, 'Apple', 800), (2, 'Orange', 500), (3, 'Banana', 300)]

1.1. #fetchone() 함수로 조회

cur.execute("select * from member")
while True:
    row = cur.fetchone()  # 조회된 결과를 한개의 레코드씩 튜플로 리턴
    if row == None:  #조회된 내용이 없는 경우
        break
    print(row)
conn.close()

2.등록

# 화면에서 id,이름,이메일를 입력받아 db에 등록하기
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()
# mapping 방식으로 등록하기 
param = []
sql = "insert into member (id,name,email) values (?,?,?)"
param.append("kic4") #첫번째 등록. 첫번째 ?의 값
param.append("dddd") #두번째 등록. 두번째 ?의 값
param.append("ccc@mmm.com") #세번째 등록. 세번째 ?의 값
cur.execute(sql,param)
conn.commit()
conn.close()

2.1.여러데이터 한번에 등록하기

#executemany(): 함수 사용

import sqlite3
data=[('test7','테스트7','test7@aaa.bbb'),
      ('test8','테스트8','test8@aaa.bbb'),
      ('test9','테스트9','test9@aaa.bbb'),
      ('test10','테스트10','test10@aaa.bbb') ]
conn = sqlite3.connect("mydb")
cur = conn.cursor()
cur.executemany\
    ("insert into member(id,name,email) values(?,?,?)", data)
conn.commit()
conn.close()

3.수정, 삭제

수정 삭제
conn = sqlite3.connect("mydb")
cur = conn.cursor()

param =[]
param.append("hongkd@aaa.bbb")
param.append("test7") #member.id
cur.execute("update member set email=? where id=?", param)
conn.commit()
conn.close()
conn=sqlite3.connect("mydb")
cur=conn.cursor()
param=[]
param.append("테스트10")
cur.execute("delete from member where name=?", param)
conn.commit()        #커밋 꼭 해야함 
conn.close()