목차
- 데이터베이스 연동이란?
- SQLite를 활용한 데이터베이스 연동
sqlite3
모듈 소개- 데이터베이스 생성 및 연결
- 데이터 삽입, 조회, 업데이트, 삭제
- SQLAlchemy를 활용한 데이터베이스 연동
- SQLAlchemy 소개
- ORM(Object-Relational Mapping)
- SQLAlchemy를 사용한 데이터베이스 조작
- 예시 코드
- 결론
- 관련 자료 및 추가 학습 자료
1. 데이터베이스 연동이란?
데이터베이스 연동은 애플리케이션이 데이터베이스에 연결하여 데이터를 저장, 조회, 업데이트, 삭제하는 작업을 말합니다. Python에서는 다양한 데이터베이스를 쉽게 연동할 수 있도록 여러 라이브러리를 제공합니다. 이 글에서는 Python 내장 모듈인 sqlite3
와 고급 데이터베이스 연동을 위한 SQLAlchemy
를 사용하여 데이터베이스를 다루는 방법을 설명합니다. 이를 통해 데이터 중심 애플리케이션을 효과적으로 개발할 수 있습니다.
2. SQLite를 활용한 데이터베이스 연동
sqlite3
모듈 소개
sqlite3
모듈은 Python 표준 라이브러리로, SQL 데이터베이스를 쉽게 사용할 수 있도록 지원합니다. SQLite는 서버가 필요 없는 임베디드 데이터베이스로, 파일 기반 데이터베이스를 생성하고 조작할 수 있습니다. 이 모듈을 사용하면 SQL 쿼리를 통해 데이터베이스를 직접 다룰 수 있습니다.
데이터베이스 생성 및 연결
SQLite 데이터베이스에 연결하려면 sqlite3.connect()
함수를 사용합니다. 데이터베이스 파일이 없으면 자동으로 생성됩니다.
예시: 데이터베이스 생성 및 연결:
import sqlite3 # 데이터베이스 연결 (데이터베이스 파일이 없으면 생성) connection = sqlite3.connect('example.db') # 커서 생성 cursor = connection.cursor()
connect()
함수는 데이터베이스에 연결하고,cursor()
메서드는 SQL 문을 실행하기 위한 커서를 생성합니다.
데이터 삽입, 조회, 업데이트, 삭제
SQL 쿼리를 사용하여 데이터베이스에 데이터를 삽입하고 조회, 업데이트, 삭제할 수 있습니다.
예시: 테이블 생성 및 데이터 삽입:
# 테이블 생성 cursor.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''') # 데이터 삽입 cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Alice', 25)) cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Bob', 30)) # 변경사항 저장 connection.commit()
execute()
메서드를 사용하여 SQL 쿼리를 실행하며,commit()
메서드를 호출하여 변경 사항을 데이터베이스에 저장합니다.
예시: 데이터 조회:
# 데이터 조회 cursor.execute("SELECT * FROM users") rows = cursor.fetchall() for row in rows: print(row)
fetchall()
메서드는 쿼리의 모든 결과를 가져옵니다. 결과는 튜플의 리스트로 반환됩니다.
예시: 데이터 업데이트 및 삭제:
# 데이터 업데이트 cursor.execute("UPDATE users SET age = ? WHERE name = ?", (28, 'Alice')) connection.commit() # 데이터 삭제 cursor.execute("DELETE FROM users WHERE name = ?", ('Bob',)) connection.commit()
- SQL
UPDATE
와DELETE
쿼리를 사용하여 데이터베이스의 데이터를 수정하고 삭제합니다.
- SQL
데이터베이스 연결 닫기
모든 작업이 완료되면 데이터베이스 연결을 닫아야 합니다.
- 예시: 연결 닫기:
connection.close()
close()
메서드를 사용하여 데이터베이스 연결을 종료합니다.
3. SQLAlchemy를 활용한 데이터베이스 연동
SQLAlchemy 소개
SQLAlchemy는 파이썬을 위한 SQL 툴킷 및 Object Relational Mapper(ORM)입니다. SQLAlchemy를 사용하면 SQL을 직접 작성하지 않고도 객체 지향적으로 데이터베이스를 조작할 수 있습니다. 이는 데이터베이스와 파이썬 객체 간의 매핑을 자동화하여 개발 생산성을 높여줍니다.
- 설치 방법:
pip install SQLAlchemy
ORM(Object-Relational Mapping)
ORM은 객체 지향 프로그래밍과 관계형 데이터베이스를 연결하는 기술로, 데이터베이스의 테이블을 파이썬의 클래스에 매핑하여 데이터를 다룹니다. SQLAlchemy를 사용하면 데이터베이스와 직접 상호 작용하는 것이 아니라 파이썬 객체를 통해 데이터베이스를 조작할 수 있습니다.
SQLAlchemy를 사용한 데이터베이스 조작
예시: 데이터베이스 및 테이블 생성:
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', echo=True) # 기본 클래스 생성 Base = declarative_base() # User 클래스 정의 (테이블 매핑) class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) age = Column(Integer) def __repr__(self): return f"<User(name='{self.name}', age={self.age})>" # 테이블 생성 Base.metadata.create_all(engine)
create_engine()
함수를 사용하여 데이터베이스 엔진을 생성하고,declarative_base()
를 사용하여 기본 클래스를 생성합니다.User
클래스는 데이터베이스 테이블과 매핑되며, 테이블을 생성하기 위해Base.metadata.create_all()
을 호출합니다.
예시: 데이터 삽입 및 조회:
# 세션 생성 Session = sessionmaker(bind=engine) session = Session() # 데이터 삽입 new_user = User(name='Charlie', age=35) session.add(new_user) session.commit() # 데이터 조회 users = session.query(User).all() for user in users: print(user)
sessionmaker
를 사용하여 데이터베이스 세션을 생성하고,add()
와commit()
을 통해 데이터를 삽입합니다.query()
메서드를 사용하여 데이터를 조회할 수 있습니다.
예시: 데이터 업데이트 및 삭제:
# 데이터 업데이트 user_to_update = session.query(User).filter_by(name='Charlie').first() user_to_update.age = 36 session.commit() # 데이터 삭제 user_to_delete = session.query(User).filter_by(name='Charlie').first() session.delete(user_to_delete) session.commit()
filter_by()
메서드를 사용하여 조건에 맞는 데이터를 조회하고, 수정 후commit()
으로 저장합니다.delete()
메서드를 사용하여 데이터를 삭제할 수 있습니다.
4. 예시 코드
sqlite3를 사용한 데이터베이스 연동
import sqlite3
# 데이터베이스 연결 및 커서 생성
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# 테이블 생성
cursor.execute('''CREATE TABLE IF NOT EXISTS products
(id INTEGER PRIMARY KEY, name TEXT, price REAL)''')
# 데이터 삽입
cursor.execute("INSERT INTO products (name, price) VALUES (?, ?)", ('Laptop', 799.99))
conn.commit()
# 데이터 조회
cursor.execute("SELECT * FROM products")
products = cursor.fetchall()
for product in products:
print(product)
# 연결 종료
conn.close()
SQLAlchemy를 사용한 데이터베이스 연동
from sqlalchemy import create_engine, Column, Integer, String, Float
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# 데이터베이스 설정
engine = create_engine('sqlite:///example.db', echo=True)
Base = declarative_base()
# Product 클래스 정의
class Product(Base):
__tablename__ = 'products'
id = Column(Integer, primary_key=True)
name = Column(String)
price = Column(Float)
# 테이블 생성
Base.metadata.create_all(engine)
# 세션 생성
Session = sessionmaker(bind=engine)
session = Session()
# 데이터 삽입
new_product = Product(name='Smartphone', price=499.99)
session.add(new_product)
session.commit()
# 데이터 조회
products = session.query(Product).all()
for product in products:
print(product.name, product.price)
5. 결론
Python에서 데이터베이스 연동은 데이터 중심 애플리케이션을 개발하는 데 필수적인 기능입니다. sqlite3
모듈을 사용하면 SQL 쿼리를 직접 실행하여 데이터베이스를 조작할 수 있으며, SQLite 데이터베이스를 쉽게 관리할 수 있습니다. 또한, SQLAlchemy
를 사용하면 ORM(Object-Relational Mapping)을 통해 데이터베이스와 상호 작용할 수 있습니다. 이를 통해 SQL 쿼리를 작성하지 않고도 객체 지향적으로 데이터베이스를 관리할 수 있으며, 복잡한 데이터베이스 작업을 간소화할 수 있습니다. 데이터베이스 연동 기술을 잘 활용하여 데이터 저장 및 조회 작업을 효과적으로 처리해 보세요.
6. 관련 자료 및 추가 학습 자료
- 공식 홈페이지 및 문서
- SQLite 공식 문서: https://www.sqlite.org/docs.html
- SQLAlchemy 공식 문서: https://docs.sqlalchemy.org/en/14/
- 국가기관 및 보고서
- NIST (국립 표준 기술 연구소) - 데이터베이스 관리 및 보안 가이드: NIST Publications
- 추천 도서
- 블로그 및 기타 자료
- Real Python - Using SQLite with Python: https://realpython.com/python-sql-libraries/
- geeksforgeeks - Python SQLite: https://www.geeksforgeeks.org/python-sqlite/
이 글에서는 Python에서 sqlite3
와 SQLAlchemy
를 사용하여 데이터베이스를 연동하는 방법을 살펴보았습니다. 데이터베이스와 연동하여 데이터를 저장하고 조회하는 기술을 활용하여 데이터 중심 애플리케이션을 효율적으로 개발해 보세요.
'Python' 카테고리의 다른 글
Python 고급 객체 지향 프로그래밍 (3) | 2024.11.24 |
---|---|
Python 테스트와 문서화 (2) | 2024.11.23 |
Python 웹 스크래핑 (2) | 2024.11.21 |
Python - 멀티스레딩과 병렬 처리 (3) | 2024.11.20 |
Python - 네트워킹 (2) | 2024.11.19 |