인공지능/파이썬

파이썬(Python) - Sqlite 사용법

해피밀세트 2020. 3. 17. 20:26
반응형

 

 

sqlite

 

별도의 DB서버가 필요없이 DB파일 기초하여 데이터베이스 처리하는 엔진

 

 

# sqlite3 라이브러리를 임포트

import sqlite3

 

 

1. 기본 사용법

# 메모리에다가 DB서버를 구성(연결)하기
conn = sqlite3.connect(":memory:")

 

# sql작성하고 실행 있는 메모리 영역 만들기

c = conn.cursor()

 

# 테이블 생성 데이터 타입 지정하기 / integer = 숫자타입

c.execute("create table dessert(id integer, name char, kal integer)")

 

# 테이블안에 넣기

c.execute("insert into dessert(id,name,kal) values(1,'케이크',324)")

 

# 메모리에 테이블값을 올리기

# (!! 주의 !!) 메모리에 올린 테이블값은 출력해도 남아있으므로 값이 계속 쌓인다.

c.execute("select * from dessert")

 

# 메모리에 올린값 개 보기(휘발성)

# 한번 패치하면 메모리에서 사라진다.

c.fetchone()

 

# 커서 먼저 닫고

c.close() 

 

# conn 닫는다.

conn.close()

 

 

# 메모리에 DB연결sql문 작성 영역 생성 / 테이블 생성
conn = sqlite3.connect(":memory:")
c = conn.cursor()
c.execute("create table dessert(id integer, name char, kal integer)")

 

# 테이블 안에 넣기
c.execute("insert into dessert(id,name,kal) values(1,'케이크',324)")
c.execute("insert into dessert(id,name,kal) values(2,'초콜릿',545)")

# 영구히 저장하려면 conn을 기반으로 commit, rollback

# 트랜잭션이 발생되었기 때문에 메모리에 올리기전에 rollback / commit 가능

conn.rollback()     # 작업 취소

 

# 테이블 안에 넣기

c.execute("insert into dessert(id,name,kal) values(1,'케이크',324)")
c.execute("insert into dessert(id,name,kal) values(2,'초콜릿',545)")

conn.commit()      # 작업 완료

 

# 메모리에 테이블값을 올리기

c.execute("select * from dessert")

 

# 메모리에 올린값 전부 보기(휘발성)

c.fetchall()

 

# 커서를 먼저 닫고 conn 닫는다.

c.close()

conn.close()

 

 

 

 

2. 데이터 영구 보존

# 커서와 conn를 닫으면 기존 테이블이 사라지기 때문에 다시 불러올 수 없다.
conn = sqlite3.connect(":memory:")
c = conn.cursor()
c.execute("select * from dessert")
c.close()
conn.close()

# 메모리로 열지 않고 지정한 경로에 데이터파일로 생성
conn = sqlite3.connect("C:/data/food.db")
c = conn.cursor()
c.execute("create table dessert(id integer, name char, kal integer)")
c.execute("insert into dessert(id,name,kal) values(1,'케이크',324)")
c.execute("insert into dessert(id,name,kal) values(2,'초콜릿',545)")
conn.commit()
c.execute("select * from dessert")
c.fetchall()
c.close()
conn.close()

# 저장된 DB파일에 연결
conn = sqlite3.connect("C:/data/food.db"
c = conn.cursor()

# 영구히 저장되었으므로 DB안의 테이블을 바로 불러올 수 있다.
c.execute("select * from dessert")
c.fetchall()

DB안에 있는 테이블 확인
c.execute("select name from sqlite_master where type='table'")
c.fetchall()

테이블 구조 확인
c.execute("PRAGMA table_info(dessert)")
c.fetchall()

테이블 삭제
c.execute("drop table dessert")
c.execute("select name from sqlite_master where type='table'")
c.fetchall()
c.close()
conn.close()

 

 

 

3. 저장

# 저장된 DB파일에 연결
conn = sqlite3.connect("C:/data/food.db")
c = conn.cursor()

# DB에 저장할 csv파일 불러오기
# 첫번째 행에 헤더가 있어야한다.
data = pd.read_csv("C:/data/dessert.csv")

# 데이터프레임(csv파일)을 DB에 저장할때 dessert라는 이름으로 저장
data.to_sql('dessert',conn,index=False)

# 테이블 구조정보 확인
c.execute("select name from sqlite_master where type='table'")
c.fetchall()
c.execute("PRAGMA table_info(dessert)")
c.fetchall()
c.execute("select * from dessert")
c.fetchall()
c.close() 
conn.close()


conn = sqlite3.connect("C:/data/food.db")
c = conn.cursor()


drink = DataFrame({'id':[1,2,3],
                          'name' : ['콜라','사이다','커피'],
                          'kcal': [37,44,1]})
# 직접만든 데이터 프레임저장 할 수도 있다.
drink.to_sql('drink',conn,index=False)


c.execute("select name from sqlite_master where type='table'")
c.fetchall()
c.execute("PRAGMA table_info(drink)")
c.fetchall()
c.execute("select * from drink")
c.fetchall()
c.close()
conn.close()

conn = sqlite3.connect("C:/data/food.db")
c = conn.cursor()

# sqllite에서 pandas로 읽어들이는 작업
# DB에 있는 테이블을 pandas에서 사용하기
drink = pd.read_sql_query("select * from drink",conn)
drink

c.close()
conn.close()

메모리를 닫은 후에도 사용할 수 있다.
drink['name']

반응형