※ 강의를 듣고 제가 이해한 내용을 바탕으로 정리 한 것이라서 오류가 있을 수 있습니다.

0. 준비물

자신이 만든 데이터베이스를 보는데 도움을 주는 편리한 도구

 

● DB Browser for SQLite portable

● 다운 받을 수 있는 사이트

 

https://sqlitebrowser.org/dl/

 

Downloads - DB Browser for SQLite

(Please consider sponsoring us on Patreon 😄) Windows Our latest release (3.12.0) for Windows: Note - If for any reason the standard Windows release does not work (e.g. gives an error), try a nightly build (below). Nightly builds often fix bugs reported

sqlitebrowser.org

 

 

1. SQLite 연동 및 데이터에 삽입할 날짜와 시간 생성

import sqlite3 # sqlite 불러오기 (파이썬에 기본적으로 가지고 있음)
import datetime # 데이터 베이스에 날짜를 삽입하기 위해 불러옴

# 데이터에 삽입할 날짜와 시간 생성
now =  datetime.datetime.now()
# 현재 날짜와 시간을 생성 하려면 datetime에 있는 datetime.now 함수를 이용해야한다.
print('now : ', now)# 날짜 및 시간 출력

nowDatetime = now.strftime('%Y-%m-%d %H:%M:%S')
# 밀리 초를 없애고 싶으면 strftime함수를 이용해서 위와 같이 쓰면 된다.
print('nowDatetime : ',nowDatetime) # 날짜 시간 및 출력

 

실행 결과

한번씩 위 날짜 및 시간 생성 코드를 출력 해보았고 최종적으로 날짜와 시간이 밀리초를 없앤

년-월-일 시간:분:초로 설정 되었다.

이제 앞으로 데이터를 DB에 저장 할때 날짜와 시간은 이 형식으로 저장된다.

 

 

2. DB생성 및 Auto commit 및 cursor설정

# DB 생성 & Auto Commit

conn = sqlite3.connect('C:/Users/user/Documents/python_basic/resource/database.db', isolation_level=None)
# DB를 생성시킬 경로 지정 및 DB생성 맨 뒤에 옵션으로  isolation_level=None 줘야 commit을 안 써줘도 DB에 데이터가 자동 저장 된다.

c = conn.cursor()
# Cursor: 데이터를 읽어오는 만큼 커서가 이동해서 읽어온 위치까지 기억하고 있다가 
# 그 다음 데이터를 읽으면 또 이동 계속해서 읽다가 데이터가 
# 끝나면 읽어올게 없기에 null 또는 none으로 표시

실행 결과

지정해준 경로에 database.db라고 이름 지어준 db파일이 생성 되었다.

 

 

 

3. 테이블 생성

# 테이블 생성(데이터 타입으로 이 4개 가능 TEXT, 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)")
#execute는 테이블을 만드는 명령어
# 테이블이 없으면 users라는 테이블을 만들겠다는 SQL문이다.
# 그리고 users의 소괄호 안에 있는 것들은 DB에 저장될 목록들과 그것들의 파일 형식을 지정 해둔것이다.
# 코드가 너무 길어져서 아래 줄에 개행 하기 위해 \를 사용하였다.

실행결과

users 테이블이 생성 된 것을 볼수있다.

 

 

 

4. 데이터 삽입 및 삭제

 

 

● 데이터 한개씩 삽입

import sqlite3
import datetime 

now =  datetime.datetime.now()

nowDatetime = now.strftime('%Y-%m-%d %H:%M:%S')

conn = sqlite3.connect('C:/Users/user/Documents/python_basic/resource/database.db', isolation_level=None)

c = conn.cursor()

c.execute("CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, username text, \
email text, phone text, website text, regdate text)")  


#예제1
c.execute("INSERT INTO users VALUES(1, 'kim', 'kim@naver.com', '010-0000-1234', \
'kim.com', ?)", (nowDatetime,))
# SQL문을 통해 테이블을 만들었을떄 목록들 데이터 형식 순서대로 데이터를 삽입해주면된다.
# 그리고 위에 nowDatetime 변수에 현재 날짜와 시간을 보여주는 함수를 선언했던걸 삽입하려면
# 변수명 그대로 해주게 되면 문자열 그대로 nowDatetime로 삽입 되기에 그러면 안되고
# ?로 처리 해놓고 뒤에 매개 변수로 튜플 형태로 삽입 해줘야한다.
# ? 표는 뒤에 선언된 매개 변수들을 순서대로 매칭 시켜서 삽입 시켜주는데 여기서는
# nowDatetime 한개 밖에 없으니 nowDatetime을 매칭 시켜서 삽입한다.
# 코드가 너무 길어져서 아래 줄에 개행 하기 위해 \를 사용하였다.

# 예제2
c.execute("INSERT INTO users(id, username, email, phone, website, regdate) VALUES (?,?,?,?,?,?\
)", (2, 'Park', 'Park@daum.net', '010-1111-1111', 'Park.com', nowDatetime,))
# SQL문에 직접 데이터 목록을 써주고 뒤에 데이터 갯수대로 ?를 주고 매개 변수로 데이터를 삽입해줘도 된다.
# 코드가 너무 길어져서 아래 줄에 개행 하기 위해 \를 사용하였다.

 

 

● 데이터 여러개 삽입

import sqlite3
import datetime 

now =  datetime.datetime.now()

nowDatetime = now.strftime('%Y-%m-%d %H:%M:%S')

conn = sqlite3.connect('C:/Users/user/Documents/python_basic/resource/database.db', isolation_level=None)

c = conn.cursor()

c.execute("CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, username text, \
email text, phone text, website text, regdate text)")  


# 여러개의 데이터 삽입(튜플 형태)
userList = (
    (3, 'Lee', 'Lee@naver.com', '010-2222-2222', 'Lee.com', nowDatetime),
    (4, 'cho', 'cho@daum.net', '010-3333-3333', 'cho.com', nowDatetime),
    (5, 'Yoo', 'Yoo@google.com', '010-4444-4444', 'Yoo.net', nowDatetime)
)
# 튜플 안의 튜플로 여러 데이터를 저장한다.

c.executemany("INSERT INTO users(id, username, email, phone, website, regdate)VALUES(?,?,?,?,?,?)", userList)
# executemany명령어로 여러개의 데이터를 한꺼번에 삽입 할 수 있다.

실행 결과

위에 코드에서 한개 씩 삽입 시킨 id 1, 2 데이터와 여러개 동시에 삽입 시킨 3, 4, 5 모두 users테이블에

삽입된 것을 볼수있다.

 

 

 

5. 테이블에 있는 모든 데이터 삭제

import sqlite3
import datetime 

now =  datetime.datetime.now()

nowDatetime = now.strftime('%Y-%m-%d %H:%M:%S')

conn = sqlite3.connect('C:/Users/user/Documents/python_basic/resource/database.db', isolation_level=None)

c = conn.cursor()

c.execute("CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, username text, \
email text, phone text, website text, regdate text)")


# 테이블 데이터 삭제

# 예제1
conn.execute("DELETE FROM users")

# 예제2
print("users db deleted : ", conn.execute("DELETE FROM users").rowcount)
# print문에 테이블 삭제 SQL문을 적어준후 마지막에 .rowcount를 적어주면
#테이블 안의 몇개의 데이터가 지워졌는지 출력을 해준다.

 실행 결과

데이터가 모두 지워진 것을 알수있다.

 

 

6. 연결 해제

import sqlite3
import datetime 

now =  datetime.datetime.now()

nowDatetime = now.strftime('%Y-%m-%d %H:%M:%S')

conn = sqlite3.connect('C:/Users/user/Documents/python_basic/resource/database.db', isolation_level=None)

c = conn.cursor()

c.execute("CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, username text, \
email text, phone text, website text, regdate text)")


# 접속 해제
conn.close()

데이터 베이스를 사용하고 나서는 리소스를 사용했기 때문에 접속을 해제 시켜줘야한다.

'개발 공부한 내용 정리 > python' 카테고리의 다른 글

python DB- 조회  (0) 2020.07.24
python- csv, 엑셀 파일 읽기  (0) 2020.07.22
python- 파일 읽기, 쓰기  (0) 2020.07.20
python- 모듈과 패키지  (0) 2020.07.19
python- 클래스  (0) 2020.07.15

+ Recent posts