※ 이 글을 쓰는 사람은 SW 비전공자입니다.
※ 개인 공부를 위해 정리하는 글이며, 작성한 코드들은 효율성, 깔끔함(?) 등과는 거리가 멀 수 있습니다.
※ SQLite3 내용 정리 링크
1편 : 2021.03.10 - [코딩/DB] - SQLite3 - Database 파일 생성, Table 생성
2편 : 2021.03.12 - [코딩/DB] - SQLite3 - DB Browser for SQLite 설치 및 실행 정리
3편 ; 2021.03.13 - [코딩/DB] - SQLite3 - Table Data 삽입 정리(INSERT)
4편 : 2021.03.15 - [코딩/DB] - SQLite3 - Table Data 조회 방법 정리(SELECT)
5편 : 2021.03.18 - [코딩/DB] - SQLite3 - Table Data 수정 및 삭제 정리(UPDATE, DELETE)
이전 편까지 파이썬 SQLite3 모듈을 활용하여 .db 파일을 생성하고 내부 Table에 data를 삽입하고 조회하는 방법에 대해 정리해보았다. 이번 포스팅에서는 삽입한 data를 수정하거나 삭제할 때 어떻게 해야하는지 정리해보려고 한다.
먼저 아래와 같이 '210227_test'라는 .db 파일을 생성하고 같은 이름의 Table을 생성하였다. 이전에 연습해봤던 코드라 파일명의 날짜형식이 2월이다. data는 test_list라는 4개 리스트로 구성되어있는 튜플로 입력하였다.
import sqlite3
con = sqlite3.connect("210227_test.db")
cur = con.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS '210227_test'(id_num INTEGER, name TEXT, age INTEGER)")
test_list = (
[1, 'James', '31'],
[2, 'Lucky', '34'],
[3, 'Apple', '33']
[4, 'YB', '29']
)
#data 삽입(여러 요소를 한번에 삽입시 executemany)
cur.executemany("INSERT INTO '210227_test'(id_num, name, age) VALUES(?,?,?)", test_list)
con.commit()
cur.close()
con.close()
1. Table Data 수정(UPDATE)
1) 튜플 형태로 수정하기
cur.execute("UPDATE '210227_test' SET name = ? WHERE id_num = ?", ('YB_수정', 4))
con.commit()
cur.close()
con.close()
위 코드는 '210227_test'라는 Table에서 id_num = 4인 Row data의 name을 'YB_수정'으로 수정하라는 의미이다. 참고로 위 코드 구조에서는 튜플이 입력된다. (name, id_num 순서대로 튜플 내부 data도 순서가 동일해야 함)
2) 딕셔너리 형태로 수정하기
cur.execute("UPDATE '210227_test' SET name = :username WHERE id_num = :id", {"username":'Banana', "id":'3'})
con.commit()
cur.close()
con.close()
Table의 필드명인 name과 id_num을 딕셔너리 key로 설정하여 data를 수정하는 방법이다. 앞에서 설정한 username과 id에 따라 뒤 중괄호(딕셔너리) key값을 똑같이 입력해야 한다.
UPDATE '210227_test' SET name = :username WHERE id_num = :id", {"username":'Banana', "id":'3'} |
3) %s 표시자 사용하는 방법
%s 표시자를 변수로 사용하여 튜플 형태로 입력이 가능하다.
튜플의 속성상 마찬가지로 SQL 쿼리 입력시 순서 name , id_num을 지켜야 수정이 된다.
cur.execute("UPDATE '210227_test' SET name = '%s' WHERE id_num = '%s'" % ('LaLaLand', '2'))
con.commit()
cur.close()
con.close()
※ SQLite3 Data 수정방법 3가지 정리
자세한 내용은 코드의 주석 참고
# ? 표시자를 활용 - 튜플 입력
cur.execute("UPDATE '210227_test' SET name = ? WHERE id_num = ?", ('YB_수정', 4))
# 딕셔너리 활용(key : value형태)
cur.execute("UPDATE '210227_test' SET name = :username WHERE id_num = :id", {"username":'Banana', "id":'3'})
# %s 표시자를 활용 - 튜플 입력
cur.execute("UPDATE '210227_test' SET name = '%s' WHERE id_num = '%s'" % ('2', 'LaLALand'))
2. Table Data 삭제(DELETE)
data를 삭제하는 방법도 3가지 방법으로 정리할 수 있다.
: ? 표시자를 활용하는 방법, 딕셔너리 활용, 전체 데이터를 삭제 하는 방법
1) ? 표시자 활용
: 튜플 형태로 입력하며, 결과를 보면 기존 id_num=4, YB_연습이 삭제되었다.
cur.execute("DELETE FROM '210227_test' WHERE id_num =?", (4,))
con.commit()
cur.close()
con.close()
2) 딕셔너리 활용
-. 수정방법과 마찬가지로 key:value 형식을 가진 딕셔너리를 활용한다.
-. 변수(key)를 id_num = :id로 지정하고 id =1 이면 삭제
-. 결과를 보면 id_num=1인 row data가 삭제되었다.
cur.execute("DELETE FROM '210227_test' WHERE id_num = :id", {"id":1})
con.commit()
cur.close()
con.close()
3) 전체 삭제
-. '210227_test' Table 내의 row data를 전체 삭제한다.
-. Table이 삭제되는 것이 아니라 Table 내 요소들이 삭제되는 것이다. 혼동하지 말자.
아래 결과에서 보면 '210227_test'라는 Table은 살아있다.
#Table 내 Row data 모두 삭제
cur.execute("DELETE FROM '210227_test'")
con.commit()
cur.close()
con.close()
※ DELETE에 대한 내용을 다시 한번 정리
# ? 표시자 활용 : 튜플 입력
cur.execute("DELETE FROM '210227_test' WHERE id_num =?", (4,))
# 딕셔너리 활용
cur.execute("DELETE FROM '210227_test' WHERE id_num = :id", {"id":1})
# 전체 삭제
cur.execute("DELETE FROM '210227_test'")
'코딩 > DB' 카테고리의 다른 글
SQLite3 - Table Data 조회 방법 정리(SELECT) (0) | 2021.03.15 |
---|---|
SQLite3 - Table Data 삽입 정리(INSERT) (0) | 2021.03.13 |
SQLite3 - DB Browser for SQLite 설치 및 실행 정리 (0) | 2021.03.12 |
SQLite3 - Database 파일 생성, Table 생성 (1) | 2021.03.10 |