승상의 코딩 블로그

파이썬 - sqlite3 라이브러리 본문

Python (파이썬)

파이썬 - sqlite3 라이브러리

양승상 2023. 6. 1. 22:54

sqlite 는 언제 쓰는게 좋을까요? 

다양한 이유가 있겠지만 저는 "데이터베이스를 사용하기 위한 별도의 프로그램이 필요없다." 라는 이유가 가장 큰 것 같습니다. 

또한, 데이터베이스가 간단히 파일 하나로 만들어지기 때문에 파일 하나만 있으면 어디에서든 사용할 수 있습니다

 

* 다른 데이터에 비해서 간단하기 때문에 가벼운 어플리케이션을 만들 때 자주 사용합니다.

 

일단! 데이터 확인을 위한 환경 구축

단순한 텍스트보다 효율적이고 안정적으로 데이터를 저장하기 위해, 데이터베이스는 각자의 형식이 있습니다. 

그러므로, 데이터베이스 파일은 단순히 메모장으로 열 수 없습니다.

sqlite3 에 "저장된 데이터를 보기 위한 환경"을 먼저 구축해 보겠습니다.

VsCode 의 Extension 에서 sqlite3 를 설치합니다.

vscode sqlite extenstion

나중에 DB 파일을 만들면 아래와 같이 저장될 것입니다.

user.db 를 선택하고, ctrl + shift + p (pallete 실행 단축키) 를 누르고 ">SQLite: Open Database" 를 입력합니다.

sqlite extenstion 으로 user.db 열기

녀VS Code 의 Explorer 창에 SQLITE EXPLORER 가 생길 것입니다.

user.db 안에 User 테이블이 있고, 테이블의 구조를 볼 수 있네요.

Users 옆의 play 버튼을 누르면, Users 테이블 안에 들어있는 데이터를 조회할 수 있습니다.

user.db 내부 확인

데이터 베이스 연결

import sqlite3
conn = sqlite3.connect('./user.db') 
# 경로에 파일이 없다면 파일을 생성 후 연결합니다.
# 경로에 파일이 있다면 파일과 연결합니다.

단순한 테스트를 위해서는 in memory(RAM) 형태로 데이터베이스를 생성할 수 있습니다. 그러나 아래처럼 써본적은 없습니다.

conn = sqlite3.connect(:memory:)

데이터베이스를 연결하는 객체를 만든 이후, cursor 객체를 통해 SQL 쿼리를 실행할 수 있습니다.

cur = conn.cursor()

테이블 생성

cur(cursor) 객체의 excute 를 사용하면 쿼리문을 사용할 수 있스빈다.

# 1줄로 표현
# cur.execute("CREATE TABLE Users(userName TEXT, gender TEXT);")

# 여러줄로 표현
cur.execute("""CREATE TABLE Users(
   userName TEXT,
   gender TEXT);
""")

conn.commit()

한줄로 보면 각 데이터를 보기 힘들기 때문에, 저는 여러줄로 적습니다. """("가 3개)를 사용하면 여러줄로 적어줄 수 있습니다.

쿼리를 실행하고, conn(connection) 객체의 commit 를 수행해야지만 database 에 적용됩니다.

데이터 추가

# 1. Query 그대로 사용
cur.execute("INSERT INTO Users VALUES('SeungSang', 'male');")

# 2. 파라미터 사용
user = ('SeungSang', 'male')
cur.execute("INSERT INTO Users VALUES(?, ?);", user)

# 마지막은 commit 으로 반영
conn.commit()

한번에 여러 데이터를 한번에 추가할 수도 있습니다.

manyUsers = [('SeungSang', 'male'), ('Yuri', 'female')]
cur.executemany("INSERT INTO Users VALUES(?, ?);", manyUsers)

conn.commit()

데이터 조회 (fetchone, fetchmany, fetchall)

fetchone 을 통해 조회된 데이터에서 첫번째 데이터만 가져올 수 있습니다.

cur.execute("SELECT * FROM Users;")
user = cur.fetchone()
print(user) # 출력 : ('SeungSang', 'male')

fetchmany 를 통해 조회된 데이터를 여러개 가져올 수도 있습니다.

fetchmany 로 넘겨주는 인자의 갯수만큼 가져옵니다. 만약, 3개를 가져오고 싶은데 조회된 데이터가 2개라면 2개만 가져옵니다.

cur.execute("SELECT * FROM Users;")
users = cur.fetchmany(2)
print(users) # 출력 : [('SeungSang', 'male'), ('Yuri', 'female')]

fetchall 을 사용하면, 조회된 모든 데이터를 가져올 수 있습니다.

cur.execute("SELECT * FROM Users;")
all_users = cur.fetchall()
print(all_users) # 출력 : [('SeungSang', 'male'), ('Yuri', 'female')]

데이터 삭제

삭제도 execute 를 통해 쿼리문을 사용하면 됩니다.

cur.execute("DELETE FROM Users WHERE userName='SeungSang';")
conn.commit()
반응형
Comments