쉽게 비교하는 SQLite vs PostgreSQL – 사용법부터 코드 예제까지

0
post-thumbnail

1. conn (Connection 객체)

  • sqlite3.connect()를 호출하면 DB와의 연결(Connection) 객체가 생성됩니다.
  • 이 객체(conn)는 데이터베이스와의 세션을 의미하며,
    DB 파일(mydb.db) 또는 메모리(:memory:)와 연결 상태를 유지합니다.

👉 역할

  • 트랜잭션 관리 (commit, rollback)
  • cursor() 메서드를 통해 커서 생성
  • 연결 종료 시 conn.close() 필요

2. cursor (Cursor 객체)

  • conn.cursor()를 호출하면 SQL 명령을 실행할 수 있는 인터페이스커서(cursor)가 나옵니다.
  • DB와 직접 대화하는 창구라고 생각하면 돼요.

👉 역할

  • SQL 문 실행 (execute())
  • 결과 가져오기 (fetchone(), fetchall())
  • 파라미터 바인딩 (execute("SELECT * FROM users WHERE id=?", (1,)))

3. execute() (SQL 실행 메서드)

  • cursor.execute(sql문)SQL 명령을 DB에 전달하고 실행합니다.
  • SELECT, INSERT, UPDATE, DELETE 등 모든 SQL 명령 실행 가능.
  • SELECT 쿼리 실행 후 → fetchone(), fetchall()로 결과 가져옴
  • DML(INSERT/UPDATE/DELETE) 실행 후 → conn.commit() 해야 실제 반영됨.

4. psycopg2와 비교

psycopg2PostgreSQL 전용 Python 라이브러리입니다.
sqlite3와 사용 방식이 매우 비슷하지만 차이점이 있어요.

특징sqlite3 (내장)psycopg2 (외부 설치 필요)
지원 DBSQLite (파일 기반)PostgreSQL (서버 기반)
설치❌ (Python에 기본 내장)✅ (pip install psycopg2) 필요
연결 방식파일(.db) 또는 메모리DB 서버(host, port) 필요
용도로컬 테스트, 연습, 소규모 앱실제 서비스, 서버 DB 연동
사용법비슷 (conn, cursor, execute)비슷 (conn, cursor, execute)

💡 즉, sqlite3와 psycopg2는 인터페이스가 거의 동일하지만

  • sqlite3서버 없이 파일만으로 동작
  • psycopg2PostgreSQL 서버가 필요

5. sqlite3 vs psycopg2 코드 비교

sqlite3psycopg2는 사용법이 매우 비슷합니다.
아래 예제는 같은 작업(테이블 생성 → 데이터 삽입 → 조회)을 각각의 라이브러리에서 구현한 코드입니다.


🔹 예제 시나리오

  1. users 테이블 생성 (id, name)
  2. 새로운 유저 데이터 삽입
  3. 모든 유저 조회 후 출력

1) sqlite3 예제

import sqlite3

# 1. DB 연결 (파일 기반)
conn = sqlite3.connect("mydb.db")
cursor = conn.cursor()

# 2. 테이블 생성
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY,
    name TEXT
)
""")

# 3. 데이터 삽입
cursor.execute("INSERT INTO users (name) VALUES (?)", ("Alice",))
conn.commit()  # ✅ 변경사항 저장

# 4. 데이터 조회
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
    print(row)

# 5. 연결 종료
conn.close()

2) psycopg2 예제

import psycopg2

# 1. PostgreSQL 서버 연결
conn = psycopg2.connect(
    host="localhost",
    dbname="mydb",
    user="postgres",
    password="password",
    port=5432
)
cursor = conn.cursor()

# 2. 테이블 생성
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50)
)
""")

# 3. 데이터 삽입
cursor.execute("INSERT INTO users (name) VALUES (%s)", ("Alice",))
conn.commit()  # ✅ 변경사항 저장

# 4. 데이터 조회
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
    print(row)

# 5. 연결 종료
cursor.close()
conn.close()

🔥 비교 포인트

비교 항목sqlite3psycopg2
DB 연결sqlite3.connect("mydb.db") (파일)psycopg2.connect(host=..., dbname=...) (서버)
SQL 파라미터 바인딩? (물음표)%s (포맷)
테이블 기본키INTEGER PRIMARY KEYSERIAL PRIMARY KEY
설치 필요 여부❌ (내장)✅ (pip install psycopg2) 필요

💡 즉, 코드 구조는 거의 동일하지만
psycopg2서버 연결 정보가 필요하고, 파라미터 바인딩 방식만 조금 다릅니다.


0개의 댓글