# Section12-1
# 파이썬 데이터베이스 연동(SQLite)
# // 파이썬의 일정 버전 이상에서는 다 포함이 되어 있다
# DB는 따로 전문가가 있을 만큼 전문적
# SQLite로 DB를 만들고 테이블을 만들고 데이터베이스를 삽입하기
# SQL 은 기초적인 정보를 삽입, 수정, 삭제, 조회 할 줄 알아도 DB 제품군이 바뀌어도
SQL 문이 비슷하므로 기초 학습
# DB는 데이터를 장기적으로 보존하는 용도. 기업에서는 기업의 존폐를 유지하는 용도
# 중복 해결/ 데이터의 무결성 제공
# SQLite 기본 사용법, 테이블 생성 및 삽입
import datetime
import sqlite3
# 삽입 날짜 생성
now = datetime.datetime.now() // datetime의 datetime 클래스의 now()라는 함수가 있다
print('now', now) // 연월일, 시분초, ms까지 나온다
nowDatetime = now.strftime('%Y-%m-%d %H:%M:%S') / strftime을 더 양식화할 수 있다
print('nowDatetime', nowDatetime) // 2021-06-17 20:48:00
# sqlite3 버전
print('sqlite3.version : ', sqlite3.version) // 어떤 버전을 사용하고 있는지 확인할 수 있다
print('sqlite3.sqlite_version', sqlite3.sqlite_version) // DB엔진 버전을 확인할 수 있다 만약 최신 버전으로 업그레이드하고 싶으면 pip로 install가능
# DB생성 & Auto commit
auto commit: DB에서 commit을 넣지 않으면 메모리 등에 저장하고 있다가
영구적으로 반영하고 싶으면 commit을 해야하는데
auto commit을 해놓으면 따로 하지 않아도 알아서 하도록 하는 것
rollback: 되돌리는 것 - 수정 이전, 삽입되기 이전으로 되돌리는 것
# 본인 DB 파일 경로
conn = sqlite3.connect('본인이 원하는 경로/database.db', isolation_level=None)
// connect 명령으로 DB 생성 가능
// isolation_level = None을 하면 auto commit이 된다 / 이게 없으면 매번 commit을 해줘야 한다
# DB생성(메모리)
# conn = sqlite3.connect(":memory:")
# Cursor연결
c = conn.cursor()
print('Cursor Type : ', type(c))
# 테이블 생성(Datatype : TEXT NUMERIC INTEGER REAL BLOB)
c.execute(
"CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, username text, email text, phone text, website text, regdate text)") # AUTOINCREMENT
# 데이터 삽입
c.execute("INSERT INTO users VALUES (1 ,'Kim','Kim@naver.com', '010-0000-0000', 'Kim.com', ?)", (nowDatetime,))
c.execute("INSERT INTO users(id, username, email, phone, website, regdate) VALUES (?, ?, ?, ?, ?, ?)",
(2, 'Park', 'Park@naver.com', '010-1111-1111', 'Park.com', nowDatetime))
# Many 삽입(튜플, 리스트)
userList = (
(3, 'Lee', 'Lee@naver.com', '010-2222-2222', 'Lee.com', nowDatetime),
(4, 'Cho', 'Cho@naver.com', '010-3333-3333', 'Cho.com', nowDatetime),
(5, 'Yoo', 'Yoo@naver.com', '010-4444-4444', 'Yoo.com', nowDatetime)
)
c.executemany("INSERT INTO users(id, username, email, phone, website, regdate) VALUES (?, ?, ?, ?, ?, ?)", userList)
# 테이블 데이터 삭제
# print("users db deleted : ", conn.execute("delete from users").rowcount, "rows")
# 커밋 : isolation_level=None 일 경우 자동 반영(Auto Commit)
conn.commit()
# 롤백
# conn.rollback()
# 접속 해제
conn.close()