Python 학습: 데이터베이스
데이터베이스는 데이터를 체계적으로 저장하고 관리하는 데 중요한 역할을 합니다. Python에서는 다양한 데이터베이스를 쉽게 다룰 수 있는 모듈과 라이브러리를 제공합니다. 이번 글에서는 SQLite, MySQL, 그리고 ORM (Object-Relational Mapping)에 대해 알아보겠습니다.
1. SQLite: sqlite3 모듈 사용
SQLite는 파일 기반의 경량 데이터베이스로, 별도의 서버 없이 쉽게 사용할 수 있습니다. Python 표준 라이브러리에는 SQLite를 다루기 위한 sqlite3 모듈이 포함되어 있습니다.
SQLite 사용 예제:
# 데이터베이스 연결 (파일 기반)
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 사용 예제:
# 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.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
class User(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
# 데이터 삽입
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!
'프로그래밍 > Python' 카테고리의 다른 글
[Python] 13. Python의 "데이터 분석 및 시각화" (0) | 2024.06.18 |
---|---|
[Python] 12. Python의 "웹 개발" (0) | 2024.06.18 |
[Python] 10. Python의 "고급 주제" (0) | 2024.06.18 |
[Python] 9. Python의 "표준 라이브러리와 외부 패키지" (0) | 2024.06.18 |
[Python] 8. Python의 "모듈과 패키지" (0) | 2024.06.18 |