본문 바로가기
프로그래밍/Python

[Python] 11. Python의 "데이터베이스"

by iwbap 2024. 6. 18.
728x90

Python 학습: 데이터베이스

데이터베이스는 데이터를 체계적으로 저장하고 관리하는 데 중요한 역할을 합니다. Python에서는 다양한 데이터베이스를 쉽게 다룰 수 있는 모듈과 라이브러리를 제공합니다. 이번 글에서는 SQLite, MySQL, 그리고 ORM (Object-Relational Mapping)에 대해 알아보겠습니다.


1. SQLite: sqlite3 모듈 사용

SQLite는 파일 기반의 경량 데이터베이스로, 별도의 서버 없이 쉽게 사용할 수 있습니다. Python 표준 라이브러리에는 SQLite를 다루기 위한 sqlite3 모듈이 포함되어 있습니다.

 

SQLite 사용 예제:

import sqlite3

# 데이터베이스 연결 (파일 기반)
conn = sqlite3.connect('example.db')

# 커서 객체 생성
cursor = conn.cursor()

# 테이블 생성
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', 30))

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

# 데이터베이스 변경사항 저장
conn.commit()

# 연결 종료
conn.close()
 

위의 예제에서 sqlite3.connect를 사용하여 데이터베이스에 연결하고, SQL 문을 실행하여 테이블을 생성하고 데이터를 삽입하고 조회합니다. 마지막으로 conn.commit을 호출하여 변경사항을 저장하고, conn.close를 호출하여 연결을 종료합니다.


2. MySQL: MySQL 연결, CRUD 작업

MySQL은 널리 사용되는 관계형 데이터베이스 관리 시스템입니다. Python에서는 mysql-connector-python과 같은 패키지를 사용하여 MySQL에 연결하고 작업할 수 있습니다.

 

MySQL 사용 예제:

import mysql.connector

# MySQL 데이터베이스 연결
conn = mysql.connector.connect(
    host='localhost',
    user='root',
    password='password',
    database='testdb'
)

# 커서 객체 생성
cursor = conn.cursor()

# 테이블 생성
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255),
    age INT
)
''')

# 데이터 삽입
cursor.execute('''
INSERT INTO users (name, age) VALUES (%s, %s)
''', ('Bob', 25))

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

# 데이터베이스 변경사항 저장
conn.commit()

# 연결 종료
conn.close()
 

위의 예제에서 mysql.connector.connect를 사용하여 MySQL 데이터베이스에 연결하고, SQL 문을 실행하여 테이블을 생성하고 데이터를 삽입하고 조회합니다. 마지막으로 conn.commit을 호출하여 변경사항을 저장하고, conn.close를 호출하여 연결을 종료합니다.


3. ORM: SQLAlchemy, Django ORM

ORM (Object-Relational Mapping)은 데이터베이스의 테이블을 Python 클래스와 매핑하여 객체 지향적으로 데이터베이스 작업을 할 수 있게 합니다. 대표적인 ORM 라이브러리로는 SQLAlchemy와 Django ORM이 있습니다.

 

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()

# 모델 정의
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

# 테이블 생성
Base.metadata.create_all(engine)

# 세션 생성
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.name, user.age)
 

위의 예제에서 SQLAlchemy를 사용하여 SQLite 데이터베이스에 연결하고, User 클래스를 정의하여 users 테이블과 매핑합니다. 세션을 사용하여 데이터를 삽입하고 조회합니다.

 

 

Django ORM 사용 예제:Django ORM은 Django 프레임워크의 핵심 기능 중 하나로, 데이터베이스 작업을 매우 간편하게 할 수 있습니다.

 

Django 프로젝트 설정 예제:

 

1. Django 프로젝트 생성 : django-admin startproject myproject

                                          cd myproject

 
 
2. 앱 생성 : python manage.py startapp myapp
 
 
3. 모델 정의 (myapp/models.py):
from django.db import models

class User(models.Model):
    name = models.CharField(max_length=100)
    age = models.IntegerField()
 
 
4. 데이터베이스 마이그레이션 : python manage.py makemigrations
                                                   python manage.py migrate
 
 
5. 데이터베이스 작업 (Django 쉘) : python manage.py shell
from myapp.models import User

# 데이터 삽입
user = User(name='David', age=40)
user.save()

# 데이터 조회
users = User.objects.all()
for user in users:
    print(user.name, user.age)
 

위의 예제에서 Django ORM을 사용하여 User 모델을 정의하고, Django 쉘에서 데이터를 삽입하고 조회합니다. Django ORM은 강력하고 사용하기 쉬운 ORM으로, Django 프로젝트에서 데이터베이스 작업을 쉽게 할 수 있게 합니다.


이 글에서는 Python의 데이터베이스 작업에 대해 알아보았습니다. SQLite, MySQL, 그리고 ORM(SQLAlchemy, Django ORM)을 사용하여 데이터베이스를 다루는 방법을 이해하고 활용하면 더 복잡한 데이터베이스 작업을 쉽게 수행할 수 있습니다. Happy Coding!

728x90