Python

Python 데이터베이스 연동

thebasics 2024. 11. 22. 17:00

목차

  1. 데이터베이스 연동이란?
  2. SQLite를 활용한 데이터베이스 연동
    • sqlite3 모듈 소개
    • 데이터베이스 생성 및 연결
    • 데이터 삽입, 조회, 업데이트, 삭제
  3. SQLAlchemy를 활용한 데이터베이스 연동
    • SQLAlchemy 소개
    • ORM(Object-Relational Mapping)
    • SQLAlchemy를 사용한 데이터베이스 조작
  4. 예시 코드
  5. 결론
  6. 관련 자료 및 추가 학습 자료

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 UPDATEDELETE 쿼리를 사용하여 데이터베이스의 데이터를 수정하고 삭제합니다.

데이터베이스 연결 닫기

모든 작업이 완료되면 데이터베이스 연결을 닫아야 합니다.

  • 예시: 연결 닫기:
    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. 관련 자료 및 추가 학습 자료


이 글에서는 Python에서 sqlite3SQLAlchemy를 사용하여 데이터베이스를 연동하는 방법을 살펴보았습니다. 데이터베이스와 연동하여 데이터를 저장하고 조회하는 기술을 활용하여 데이터 중심 애플리케이션을 효율적으로 개발해 보세요.

반응형

'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