SQLite
- 관계형 데이터베이스 관리 시스템(RDBMS) 중 하나
- 서버가 필요 없는 경량의 오픈 소스 데이터베이스 엔진
- 퍼블릭 도메인에 속하며, C 라이브러리로 제공되며, 거의 모든 주요 플랫폼에서 사용할 수 있다.
- 이 데이터베이스는 별도의 서버 프로세스를 사용하지 않고 응용 프로그램에 직접 접근하여 사용할 수 있다. 효율적이며 서버 기반 데이터베이스와는 다른 사용 사례를 가진다.
SQLite 특징 총 정리
1. 경량 및 포터블
- SQLite는 작고 경량이며 다양한 운영 체제에서 사용할 수 있다.
- 데이터베이스 파일은 단일 파일로 구성되어 이식성이 뛰어나며, 서버를 설치할 필요가 없다.
2. 오픈 소스
- 퍼블릭 도메인 소프트웨어로 라이센스되어 있어 무료로 사용할 수 있다.
3. 서버가 필요 없다!
- 클라이언트/서버 아키텍처를 사용하지 않는다.
- 대신 데이터베이스에 직접 접근하여 데이터를 저장하고 검색한다.
4. 내장 SQL 엔진
- 내장형 SQL 엔진을 사용하여 데이터를 관리하며, 표준 SQL을 지원한다.
- 따라서 대부분의 SQL 쿼리와 명령을 SQLite에서 사용할 수 있다.
5. 무결성 보장
- 트랜잭션 처리를 지원하여 데이터 무결성을 보장한다.
- 따라서 예기치 않은 전원 손실 또는 시스템 충돌 시 데이터 손상이 발생할 가능성이 줄어든다.
SQLite 사용 방법
// python
import sqlite3
# SQLite 데이터베이스 연결
conn = sqlite3.connect('example.db')
# 커서 생성
c = conn.cursor()
# 테이블 생성
c.execute('''CREATE TABLE IF NOT EXISTS stocks
(date text, trans text, symbol text, qty real, price real)''')
# 데이터 삽입
c.execute("INSERT INTO stocks VALUES ('2024-03-31', 'BUY', 'GOOG', 100, 1050.25)")
# 변경 내용 커밋
conn.commit()
# 데이터 조회
c.execute('SELECT * FROM stocks')
print(c.fetchall())
# 연결 종료
conn.close()
1. SQLite 데이터베이스를 연결
2. 'stocks'라는 테이블을 생성하고, 데이터를 삽입
3. 데이터를 조회하는 방법을 제공(SELECT * FROM stocks)
SQLite 추가적인 개념(TIP!)
1. 인덱스(Indexing)
대용량 데이터베이스에서 데이터 검색 성능을 향상시키기 위해 인덱스를 사용할 수 있다.
SQLite에서도 인덱스를 지원하며, 특정 열에 대한 인덱스를 생성하여 해당 열을 기반으로 빠르게 검색할 수 있다.
c.execute("CREATE INDEX IF NOT EXISTS idx_symbol ON stocks (symbol)")
2. 트랜잭션(Transaction)
- SQLite는 트랜잭션을 지원하여 여러 개의 SQL 명령을 논리적으로 묶어서 처리할 수 있다.
- 이를 통해 데이터의 일관성과 무결성을 보장한다.
conn.execute("BEGIN TRANSACTION")
# 여러 SQL 명령 실행
conn.execute("COMMIT")
3. 외부 키(Foreign Key) 제약
- SQLite는 외부 키 제약을 사용하여 테이블 간의 관계를 정의하고 데이터 무결성을 유지할 수 있다
- 하지만 기본 설정으로 외부 키 제약은 비활성화되어 있으므로 활성화해야 한다.
c.execute("PRAGMA foreign_keys = ON")
4. 데이터베이스 백업 및 복구
- SQLite는 데이터베이스 파일 자체를 백업하고 복구하는 간단한 방법을 제공한다.
- 이를 통해 데이터 손실을 방지할 수 있다.
import shutil
# 백업
shutil.copyfile('example.db', 'backup.db')
# 복구
shutil.copyfile('backup.db', 'example.db')
5. ORM(Object-Relational Mapping)
- SQLAlchemy와 같은 ORM 라이브러리를 사용하여 객체와 데이터베이스 간의 매핑을 관리할 수 있다.
- 이를 통해 데이터베이스 작업을 보다 쉽게 수행할 수 있다.
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
engine = create_engine('sqlite:///example.db')
Session = sessionmaker(bind=engine)
Base = declarative_base()
class Stock(Base):
__tablename__ = 'stocks'
id = Column(Integer, primary_key=True)
date = Column(String)
trans = Column(String)
symbol = Column(String)
qty = Column(Integer)
price = Column(Integer)
# 데이터베이스 연결
session = Session()
# 데이터 조회
stocks = session.query(Stock).all()
'CS' 카테고리의 다른 글
동기화와 교착상태 (1) | 2024.04.04 |
---|---|
고차 함수와 재귀 함수 (0) | 2024.04.03 |
UUID 개념 및 생성 방법 (0) | 2024.04.01 |
람다(lambda) 함수 (1) | 2024.03.21 |
인증과 권한 (0) | 2024.03.18 |