본문 바로가기
Database/sqlite3

[Python sqlite3] SQLite - 데이터 읽기·변경·삭제 - SELECT, UPDATE, DELETE, WHERE

by dev수니 2021. 4. 5.
반응형

 

 

 

 1  데이터 읽기

 

 

저장되어 있는 테이블의 데이터를 읽는다. 다음과 같이 select 해서 사용한다.

SELECT * FROM 테이블명

fetchone() 행단위로 데이터를 읽는 메서드이다. 커서가 이동하기 때문에 데이터를 행단위로 불러온다.

반환값은 튜플로 온다. 데이터가 없을 경우에는 None을 반환한다.

 

cur.execute("SELECT * FROM list")

 

 

 

 

# fetchone() 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from sqlite3 import *
 
con = connect("C:\\DBMS\\Person_list2.db"# 데이터베이스 연결
cur = con.cursor()  # 메모리공간 제공
 
# 데이터 베이스 읽기
cur.execute("SELECT * FROM list")
 
# fetchone() 행단위로 데이터를 읽는 메서드
print(cur.fetchone())
print(cur.fetchone())
print(cur.fetchone())
 
con.commit()   # 생성된 테이블이나 삽입 데이터를 저장 꼭 마지막에 commit()으로 닫아주어야 한다.
con.close()
cs
('아무개', 20, '강남구')
('개똥이', 8, '송파구')
None
>>>

줄7에 SELECT * FROM list 로 데이터 베이스의 list 테이블을 읽어오고

줄9~11에서 fetchone()으로 데이터를 행단위로 읽어왔다.

출력 결과 입력된 데이터 두행은 출력이 되고 세번째 행은 값이 없기 때문에 None으로 출력된 것을 볼 수 있다.

 

# fetchone() : 행단위로 데이터를 읽는 메서드이다. 반환 값이 튜플로 온다. 데이터가 없을 경우 None을 반환한다.

 

 

 

 

 

위의 경우 데이터의 양 만큼 코드가 중복된다.

따라서 for문을 이용하여 다음과 같이 코드를 작성해보자.

 

 

 

 

# for문 이용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from sqlite3 import *
 
con = connect("C:\\DBMS\\Person_list.db"# 데이터베이스 연결
cur = con.cursor()  # 메모리공간 제공
 
# 데이터 베이스 읽기
cur.execute("SELECT * FROM list")
 
# for문 이용
for row in cur:
     print(row)
 
con.commit()   # 생성된 테이블이나 삽입 데이터를 저장 꼭 마지막에 commit()으로 닫아주어야 한다.
con.close()
cs
('아무개', 20, '강남구')
('개똥이', 8, '송파구')
>>> 

위와 같이 for문을 이용해 cur로 행단위로 출력 후 더이상 데이터가 없으면 끝난다.

 

 

 

 

 

 

# fetchall() 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from sqlite3 import *
 
con = connect("C:\\DBMS\\Person_list2.db"# 데이터베이스 연결
cur = con.cursor()  # 메모리공간 제공
 
# 데이터 베이스 읽기
cur.execute("SELECT * FROM list")
 
# fetchall() 
= cur.fetchall()
print(f)
print("타입>",type(f))
 
con.commit()   # 생성된 테이블이나 삽입 데이터를 저장 꼭 마지막에 commit()으로 닫아주어야 한다.
con.close()
 
cs
[('아무개', 20, '강남구'), ('개똥이', 8, '송파구')]
타입> <class 'list'>
>>> 

 

데이터 전체를 행단위로 끊어서 튜플로 저장하고, 튜플전체를 리스트를 묶어서 반환한다.

 

 

 

# WHERE을 이용해서 원하는 데이터만 가져올 수 있다.

# 먼저다음과 같이 DB를 작성한다.

 

 

 


 

 

 

 2  데이터 변경

 

 

UPDATE와 SET과 WHERE을 이용하여 원하는 데이터를 변경할 수 있다. 

execute("UPDATE 테이블명 SET 필드명 WHERE 수정할필드명")

 

 

 

# 다음 WHERE과 SET을 사용해 데이터를 변경해보자. 

# 다음과 같이 Booklist DB 를 먼저생성했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from sqlite3 import *
 
# 연결
con = connect("Book_list.db")
cur = con.cursor()
 
 
# 테이블 생성
cur.execute("CREATE TABLE Booklist(Name text,Page text)")
 
# 생성 된 테이블에 데이터를 추가
cur.execute("INSERT INTO Booklist Values('한국사','200')")
cur.execute("INSERT INTO Booklist Values('중국사','300')")
 
name = input("책이름>")
page = input("페이지>")
cur.execute("INSERT INTO Booklist Values(?,?);",(name,page))
cs

 

run한 후 다음과 같이 입력해주었다.

 

브라우저로 확인해보면 다음과 같이 데이터가 저장되었다.

 

 

 

 

 

# 그 후 다음과 같이 데이터를 수정해주었다.

1
2
3
4
5
6
7
8
9
10
11
from sqlite3 import *
 
# 연결
con = connect("Book_list.db")
cur = con.cursor()
 
# 데이터 변경
cur.execute("UPDATE Booklist SET Name='영어사' WHERE Name='중국사'")
 
con.commit()
con.close()
cs

 

run하고 브라우저를 확인해보면 다음과 같이 데이터가 변경되어있다.

 

 

 

 

 

 


 

 

 

 3  데이터 삭제

 

 

DELETE FROM 와 WHERE 를 사용하여 원하는 데이터를 삭제해줄 수 있다.

DELETE FROM 테이블명 WHERE 필드명

 

 

# 다음 DELETE FROM 과 WHERE을 사용해 데이터를 삭제해보자.

1
2
3
4
5
6
7
8
9
10
11
12
from sqlite3 import *
 
# 연결
con = connect("Book_list.db")
cur = con.cursor()
 
# 데이터 삭제
cur.execute("DELETE FROM Booklist WHERE Name='마라도 장미'")
 
con.commit()
con.close()
 
cs

 

 

run 해주고 브라우저창을 확인해보면 다음과 같이 마라도 장미 행이 삭제된 걸 볼 수 있다.

 

 

 

 

 

 

 


 

 

 

 

 4  데이터 다루는 방법

 

지금까지 DELETE WHERE , UPDATE SET WHERE 을 사용할 때 사용할 데이터를 입력하는 방식을 한가지 방식으로만 사용해 주었다. 하지만 데이터를 입력하는 방식은 네가지로 그중 자신이 가장 편한 것을 사용하면 된다.

그럼 어떤 방식이 있는지 알아보자.

 

먼저 데이터를 읽어오는 방식이다. 위에서 

반응형

댓글