※ 강의를 듣고 제가 이해한 내용을 바탕으로 정리 한 것이라서 오류가 있을 수 있습니다.
0. 준비물
자신이 만든 데이터베이스를 보는데 도움을 주는 편리한 도구
● DB Browser for SQLite portable
● 다운 받을 수 있는 사이트
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 |