[1] SQLite3란?
SQLite3는 관계형 데이터베이스 관리 시스템(RDBMS)을 제공하는 소프트웨어 라이브러리입니다. SQLite3는 SQL(Structured Query Language)을 지원하여 데이터를 삽입, 갱신, 삭제, 조회 등 쉽게 조작할 수 있습니다. 또한, SQLite3는 파일 기반의 로컬 데이터베이스로 작동하며, 별도의 데이터베이스 서버가 필요하지 않고 Python에 내장되어 있어 설치 없이 간단하게 데이터베이스를 생성하고 관리할 수 있습니다.
[2] MySQL과의 차이점
MySQL과 SQLite3는 둘 다 관계형 데이터베이스 관리 시스템(RDBMS)이지만, 몇 가지 차이점이 있습니다.
- 설치와 설정
- MySQL을 사용하려면 별도로 MySQL 서버를 설치해야 합니다. 설치 과정으로 인해 더 많은 작업이 필요할 수 있습니다.
- SQLite3는 Python의 내장 모듈로 별도의 설치가 필요 없이 SQLite3 데이터베이스 파일만 있다면 즉시 사용할 수 있습니다.
- 서버
- MySQL은 별도의 서버가 필요합니다. 클라이언트가 MySQL 서버에 연결하여 데이터베이스에 접근하고 데이터를 관리합니다.
- SQLite3는 로컬 파일 기반의 데이터베이스로 서버 없이 동작이 가능합니다. 그래서 소규모의 애플리케이션이나 임베디드 시스템에서 자주 사용됩니다.
- 성능
- MySQL은 고급 데이터베이스 기능을 지원하여 동시 사용자와 대규모 데이터베이스를 처리하는데 최적화되어있고 서버 기반으로 동작하기 때문에 높은 성능을 제공할 수 있습니다.
- SQLite3는 경량성을 지향하여 소수의 동시 사용자와 규모가 작은 데이터베이스를 처리하는 데에 적합합니다. 고급 기능이나 복잡한 쿼리는 제한적일 수 있으나 경량 데이터베이스로 간단한 쿼리와 데이터 조작을 처리하는데 최적화되어 있습니다.
- 사용 사례
- MySQL은 대규모 웹 애플리케이션, e-commerce, 소셜 미디어 플랫폼 등 데이터양과 동시 사용자 수가 많은 상업적인 환경에서 주로 사용됩니다.
- SQLite3는 임베디드 시스템, 모바일 애플리케이션, 개인 프로젝트, 작은 규모의 웹 애플리케이션 등에 널리 사용됩니다.
MySQL과 SQLite3의 특징을 고려해 프로젝트의 크기와 목적에 따라 적절한 관계형 데이터베이스 관리 시스템(RDMBS)을 선택하는 것이 중요합니다.
[3] SQLite3 사용 방법
SQLite3를 사용하는 방법은 Chapter2에서 MySQL을 사용하는 방법과 유사합니다. MySQL을 사용할 때 pymysql 라이브러리를 불러왔듯이 SQLite3를 사용할 때는 sqlite3 라이브러리를 불러옵니다. 이 책에서는 주로 MySQL을 사용하여 DB를 생성하고 데이터를 적재할 것이기 때문에 SQLite3 사용법은 필수적인 부분만 언급하도록 하겠습니다.
[3-1] SQLite3 연결 및 간단 사용법
1. SQLite3 라이브러리 import
import sqlite3
- connect()
connect()를 사용하여 연결을 설정할 수 있습니다. 아래 코드와 같이 sqlite_test.db에 연결을 설정하면 기존의 ‘sqlite_test’ DB에 연결됩니다. 만약, ‘sqlite_test’라는 이름의 DB가 없다면 새로 생성되어 연결됩니다.
conn = sqlite3.connect('sqlite_test.db')
- cursor()
cursor()를 사용하여 커서를 생성합니다. 커서를 이용하여 SQL 문을 실행하고 결과를 검색할 수 있습니다.
cursor = conn.cursor()
- excute()
excute()를 사용하여 SQL 문을 작성하고 실행할 수 있습니다.
cursor.execute('SELECT * FROM table_name')
- fetchone(), fetchall(), fetchmany()
fetchone(), fetchall(), fetchmany()를 사용하여 쿼리 결과를 가져올 수 있습니다. 상황에 따라 적절한 메서드를 사용해야 합니다.
- fetchone(): 한 번 호출할 때 하나의 Row만 가져옴
- fetchall(): 한 번에 모든 데이터를 가져옴
- fetchmany(n): 호출 시 n개의 데이터를 가져옴
result = cursor.fetchall()
- close()
close()를 사용하여 데이터베이스 연결을 닫습니다.
conn.close()
[3-2] SQLite3 사용 예시
간단한 예제를 통해 SQLite3 라이브러리를 사용해 보겠습니다. 각 데이터베이스, 테이블, Column명은 아래와 같이 명명하겠습니다.
- DB명: database
- Table명: people
- Table Columns: id (INTEGER) / name (TEXT) / age (INTEGER)
SQLite3 라이브러리를 import하여 database.db를 생성 및 연결하고 data의 값들을 새로 만든 people 테이블에 추가하겠습니다.
import sqlite3 data = { 'id': [1, 2, 3, 4, 5], 'name': ['John', 'Alice', 'Bob', 'Kane', 'Jack'], 'age': [25, 30, 35, 40, 45] } # 데이터베이스에 연결 conn = sqlite3.connect('database.db') # 커서 생성 cursor = conn.cursor() # people 테이블 생성 cursor.execute('CREATE TABLE people (id INTEGER, name TEXT, age INTEGER)') # 데이터 삽입 for i in range(len(data['id'])): cursor.execute('INSERT INTO people VALUES (?, ?, ?)', (data['id'][i], data['name'][i], data['age'][i])) # 커밋(변경 사항 저장) conn.commit() # 연결 닫기 conn.close()
원하는 데이터를 조회해 보면 테이블에 저장된 데이터가 정상적으로 출력되는 것을 확인할 수 있습니다.
- people 테이블의 전체 데이터 조회
# 데이터베이스에 연결 conn = sqlite3.connect('database.db') # 커서 생성 cursor = conn.cursor() # 데이터 조회 cursor.execute('SELECT * FROM people') result = cursor.fetchall() # 조회 결과 출력 for row in result: print(row) # 연결 닫기 conn.close()
결과
(1, 'John', 25) (2, 'Alice', 30) (3, 'Bob', 35) (4, 'Kane', 40) (5, 'Jack', 45)
- people 테이블의 name만 조회
# 데이터베이스에 연결 conn = sqlite3.connect('database.db') # 커서 생성 cursor = conn.cursor() # 데이터 조회 cursor.execute('SELECT name FROM people') result = cursor.fetchall() # 조회 결과 출력 for row in result: print(row) # 연결 닫기 conn.close()
결과
('John',) ('Alice',) ('Bob',) ('Kane',) ('Jack',)