본문 바로가기

코딩/DB

SQLite3 - Table Data 수정 및 삭제 정리(UPDATE, DELETE)

반응형

※ 이 글을 쓰는 사람은 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()

 

 

< DB browser for SQLite3 프로그램 결과 >

 

 

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도 순서가 동일해야 함)

 

<결과 : id_num 4번째 수정 됨>

 

 

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번 data 수정 됨 >

 

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

 

< 결과 : 2번 data 수정 됨 >

 

 


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

 

<결과 : 4번  data 삭제 됨>

 

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

 

 

<결과 : 1번 data 삭제 됨>

 

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

 

 

<결과 : data 모두 삭제>


  ※ 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'")

 

728x90