sqlite3를 통해서 Python 과 DB는 연동된다.
conn: SQL연결과 관련된 셋팅 포함
Cursor : 질의를 수행하고 결과를 얻는 객체
execute() ; 질의의 실행
conn.commit(): DB업데이트
close(): DB연결 끊기
c.executemany():한건번에 여러개의 데이터 처리, list로 관리한다
정의: 쪼개질 수 없는 업무처리의 단위(원자같은 느낌)
필요 기술
ACID : 트랜젝션이 안전하게 수행된다는 것을 보장하는 성질 약어
import sqlite3
print("뿅💛")
import os
db_path = os.getenv('HOME')+'/mydb.db'
conn = sqlite3.connect(db_path)# DB이름 정하기(mydb, [이름].[확장자명], sql 세팅과 관련 있음
print(conn)
c = conn.cursor() # Connect()함수 연결 사용하여 cursor객체 생성
print(c)
# stocks이라는 이름의 테이블을 하나 생성합니다. 혹시 이미 생성되었다면 생략합니다.
c.execute("CREATE TABLE IF NOT EXISTS stocks (date text, trans text, symbol text, qty real, price real)")
# stocks 테이블에 데이터를 하나 인서트합니다.
c.execute("INSERT INTO stocks VALUES ('20200701', 'TEST', 'AIFFEL', 1, 10000)")
# 방금 인서트한 데이터를 조회해 봅니다.
c.execute("SELECT * FROM stocks")
# 조회된 내역을 커서를 통해 가져와 출력해 봅니다.
print(c.fetchone())
conn.commit() # commit()은 cursor의 메소드가 아니라 connection의 메소드입니다.
print("뿅💛")
*DDL문
import sqlite3
import os
db_path = os.getenv('HOME')+'/mydb.db'
conn = sqlite3.connect(db_path)
c = conn.cursor()
#- ! 재실행 시 테이블이 존재할 수 있으므로 아래처럼 해당 테이블들을 모두 지워줍니다.
c.execute("DROP TABLE IF EXISTS 도서대출내역")
c.execute("DROP TABLE IF EXISTS 도서대출내역2")
c.execute("DROP TABLE IF EXISTS 대출내역")
c.execute("DROP TABLE IF EXISTS 도서명")
#----- 1st table : 도서대출내역 -----#
c.execute("CREATE TABLE IF NOT EXISTS 도서대출내역 (ID varchar, 이름 varchar, 도서ID varchar, 대출일 varchar, 반납일 varchar)")
#- 생성(create)문 : 테이블명, 변수명, 변수타입을 지정
data = [('101','문강태','aaa','2020-06-01','2020-06-05'),
('101','문강태','ccc','2020-06-20','2020-06-25'),
('102','고문영','bbb','2020-06-01',None),
('102','고문영','ddd','2020-06-08',None),
('103','문상태','ccc','2020-06-01','2020-06-05'),
('104','강기둥',None,None,None)]
#- 입력할 데이터를 그대로 입력 (변수명 순서 기준대로)
c.executemany('INSERT INTO 도서대출내역 VALUES (?,?,?,?,?)', data)
#- 입력할 데이터를 실제 테이블에 insert하기
#-----------------------------------------------#
#----- 2nd table : 도서대출내역2 -----#
c.execute("CREATE TABLE IF NOT EXISTS 도서대출내역2 (ID varchar, 이름 varchar, 대출년월 varchar, 대출일수 varchar)")
data = [('101','문강태','2020-06','20일'),
('102','고문영','2020-06','10일'),
('103','문상태','2020-06','8일'),
('104','강기둥','2020-06','3일')]
c.executemany('INSERT INTO 도서대출내역2 VALUES (?,?,?,?)', data)
#--------------------------------------------------#
#----- 3rd table : 대출내역 -----#
c.execute("CREATE TABLE IF NOT EXISTS 대출내역 (ID varchar, 이름 varchar, 도서ID varchar)")
data = [('101','문강태','aaa'),
('102','고문영','bbb'),
('102','고문영','fff'),
('103','문상태','ccc'),
('104','강기둥',None)]
c.executemany('INSERT INTO 대출내역 VALUES (?,?,?)', data)
#-----------------------------------------#
#----- 4th table : 도서명 -----#
c.execute("CREATE TABLE IF NOT EXISTS 도서명 (도서ID varchar, 도서명 varchar)")
data = [('aaa','악몽을 먹고 자란 소년'),
('bbb','좀비아이'),
('ccc','공룡백과사전'),
('ddd','빨간구두'),
('eee','잠자는 숲속의 미녀')]
c.executemany('INSERT INTO 도서명 VALUES (?,?)', data)
#--------------------------------------#
conn.commit()
conn.close()
print("뿅💛")
conn = sqlite3.connect(db_path)
c = conn.cursor()
for row in c.execute('SELECT * FROM 도서명'):
print(row)