01 sqlite3로 SQL 명령문 실행
1. DBMS와 데이터모델링
1.1. 데이터베이스 (DataBase)
데이터베이스(DB) : 하드웨어에 저장된 데이터의 집합 자체를 의미한다. 서류들이 가득 차 있는 ‘서류함’과 같다
1.2. 데이터베이스 관리 시스템 (DataBase Management System)
데이터베이스 관리 시스템(DBMS): 저장된 데이터베이스를 관리해 주는 소프트웨어이다. 서류함에서 원하는 서류를 찾고, 정리하고, 보호하는 ‘관리인’ 역할을 한다.
- DB: 데이터를 보관하는 저장소
- DBMS: 저장소를 관리하는 소프트웨어
1.3. 데이터베이스 종류 (데이터 모델 기준)
데이터가 어떤 구조로 연결되고 저장되는지에 따른 분류입니다.
| 종류 | 특징 | 비고 |
|---|---|---|
| 계층형 (Hierarchical) | 데이터가 나무 뿌리처럼 상하 관계로 연결됨 | 1960년대 최초 출시(IMS 등) |
| 네트워크형 (Network) | 데이터 간의 관계를 그물 형태로 연결함 | 계층형의 단점을 보완하기 위해 개발됨 |
| 관계형 (Relational) | 데이터를 표(Table) 형태로 관리함 | 현재 가장 널리 쓰이는 표준 모델 |
| 객체형 (Object-oriented) | 정보를 객체 단위로 저장함 | 프로그래밍의 객체 지향 개념을 도입함 |
1.4. 주요 DBMS 종류 (소프트웨어 제품 기준)
현재 시장에서 활발히 사용되는 구체적인 소프트웨어들입니다.
| 제품명 | 데이터 모델 | 주요 특징 |
|---|---|---|
| Oracle | 관계형(Relational) | 강력한 보안과 성능, 대규모 시스템용 |
| MySQL / MariaDB | 관계형(Relational) | 오픈 소스, 웹 서비스 개발에 대중적임 |
| PostgreSQL | 관계형(Relational) | 신뢰성과 확장성이 뛰어난 오픈 소스 |
| SQLite | 관계형(Relational) | 가벼운 파일 기반, 파이썬 내장 라이브러리 |
| MongoDB | 문서형(Document) | 비정형 데이터 처리에 적합한 NoSQL |
| Redis | 키-값(Key-value) | 속도가 매우 빠른 인메모리 저장소 |
| Elasticsearch | 검색 엔진 | 대량의 텍스트 검색 및 분석에 특화됨 |
1.5. 데이터모델링 3단계
PDF보기데이터베이스는 정보를 담는 **구조(모델)**를 먼저 결정하고, 그 구조를 실질적으로 관리할 **도구(DBMS 제품)**를 선택하여 사용하게 된다. 실습에서 사용할 **에스큐엘라이트(SQLite)**는 관계형 모델을 따르면서도 별도의 서버가 필요 없는 매우 가벼운 도구이다.
1.6. SQL 명령문
1.6.1. 특정 명령을 실행하도록 지시
| 명령어 | 설명 |
|---|---|
execute('단일 SQL 명령어') | 단일명령어 , 명령어 딱 하나만 입력할수 있다 |
executescript('복수 SQL 명령어') | 복수명령어 , 명령어 여려개 입력할수 있다 |
executemany('단일 SQL 명령어', 데이터 복수개 ) | 복수명령어 와 복수 데이터 |
1.6.2. SELECT 문을 활용해 DB 테이블의 데이터를 가져온 후 꺼낼때 활용
| 명령어 | 설명 |
|---|---|
fetchall() | SELECT문으로 얻어진 데이터 모두 꺼냄 |
fetchone() | SELECT문으로 얻어진 데이터 중 첫번째 행 하나 꺼냄 |
1.6.3. 조작의 3단계
- conn.cursor()
- 데이터베이스 테이블에 연결하여 명령 실행
- conn.commit() & rollback()
- commit 는 저장, rollback 는 복구
- conn.close()
- DB서버 종료
1.6.4. 데이터베이스 생성
app.py
1import sqlite32dbpath = "maindb.db"3conn = sqlite3.connect(dbpath)4
5cur=conn.cursor() #cursor() 함수는 자료 보관소(데이터베이스)에 직접 명령을 전달하고 결과를 가져오는 '작업 대리인'을 생성하는 기능6# conn.commit()&conn.rollback()7# conn.close8cur.execute()위 코드를 실행하면 ‘maindb.db’ 파일이 생성된다.
maindb.db 파일은 vscode에서 읽을수 없으므로 추가 프로그램을 설치한다. DB Browser for SQLite 프로그램은 SQLite 로 작성된 데이터베이스를 쉽게 관리할수 있게 도와준다.
1.6.4.1. sqlitebrowser 설치
- 프로그램설치링크
- 자신의 OS에 해당하는 링크를 클릭하여 다운로드 한다.

- 윈도우의 경우 포터블을 다운로드 한다.

- 설치
1.6.5. 테이블생성
1cursor.execute(2 """3 CREATE TABLE songs (4 id INTEGER PRIMARY KEY AUTOINCREMENT,5 title TEXT NOT NULL,6 artist TEXT NOT NULL,7 genre TEXT,8 play INTEGER DEFAULT 09 )10"""11)[설명]
"""는 여러 줄 SQL문을 실행할때 작성한다.- id INTEGER PRIMARY KEY AUTOINCREMENT : 고유 번호(id). 자동으로 1씩 증가.
- title TEXT NOT NULL : 노래 제목(문자열). 반드시 값 필요.
- artist TEXT NOT NULL : 가수(문자열). 반드시 값 필요.
- genre TEXT : 장르(문자열). 선택적 항목.
- play INTEGER DEFAULT 0 : 재생수(정수). 기본값 0.
- DB Browser 을 실행하고 아래 이미지를 참고하여 데이터베이스를 연다.

- 생성된 테이블의 구조를 확인한다.

1.6.6. 데이터 삽입
- app.py 에 테이블 생성 로직은 삭제한다.
- 아래의 소스코드 추가
1songs_data = [2 ("Supernova", "aespa", "K-Pop"),3 ("Dynamite", "BTS", "K-Pop"),4 ("Blinding Lights","The Weeknd","Pop"),5 ("GODS", "NewJeans", "K-Pop"),6 ("Levitating", "Dua Lipa", "Pop"),7]8
9cur.executemany(10 "INSERT INTO songs (title, artist, genre) VALUES (?, ?, ?)",11 songs_data12)13
14conn.commit()15print(f"{cur.rowcount}개의 데이터가 삽입되었습니다.")- app.py 실행
python app.py - DB브라우저에서 확인
