카테고리 없음

[패캠 네카라쿠배 2기] 2차 테스트 4일차 13. SQLite, 테이블 삽입, 삭제

닉네임이 멋이 중헌디 2021. 6. 17. 23:01

# 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()