21장: 데이터베이스
파이썬은 다양한 데이터베이스와 상호작용하기 위한 라이브러리를 제공하여 SQL 데이터베이스뿐만 아니라 NoSQL 데이터베이스도 지원합니다. 이 장에서는 SQLite, MySQL, PostgreSQL, 그리고 MongoDB와 같은 데이터베이스와 상호작용하는 방법을 알아보겠습니다.
#### 21.1 SQLite
SQLite는 파일 기반의 경량 데이터베이스로, 별도의 서버 설정 없이 사용할 수 있습니다. `sqlite3` 모듈을 사용하여 SQLite 데이터베이스를 다룰 수 있습니다.
##### 21.1.1 데이터베이스 연결
```python
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))
# 데이터 커밋
conn.commit()
# 데이터 조회
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall()
for row in rows:
print(row)
# 연결 닫기
conn.close()
```
#### 21.2 MySQL
MySQL은 널리 사용되는 관계형 데이터베이스입니다. `mysql-connector-python` 라이브러리를 사용하여 MySQL 데이터베이스와 상호작용할 수 있습니다. 먼저 라이브러리를 설치해야 합니다.
```sh
pip install mysql-connector-python
```
##### 21.2.1 데이터베이스 연결
```python
import mysql.connector
# 데이터베이스 연결
conn = mysql.connector.connect(
host='localhost',
user='root',
password='password',
database='test_db'
)
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))
# 데이터 커밋
conn.commit()
# 데이터 조회
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall()
for row in rows:
print(row)
# 연결 닫기
conn.close()
```
#### 21.3 PostgreSQL
PostgreSQL은 강력한 기능을 제공하는 오픈 소스 관계형 데이터베이스입니다. `psycopg2` 라이브러리를 사용하여 PostgreSQL 데이터베이스와 상호작용할 수 있습니다. 먼저 라이브러리를 설치해야 합니다.
```sh
pip install psycopg2-binary
```
##### 21.3.1 데이터베이스 연결
```python
import psycopg2
# 데이터베이스 연결
conn = psycopg2.connect(
host='localhost',
database='test_db',
user='postgres',
password='password'
)
cursor = conn.cursor()
# 테이블 생성
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
name VARCHAR(255),
age INT
)
''')
# 데이터 삽입
cursor.execute('''
INSERT INTO users (name, age) VALUES (%s, %s)
''', ('Charlie', 35))
# 데이터 커밋
conn.commit()
# 데이터 조회
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall()
for row in rows:
print(row)
# 연결 닫기
conn.close()
```
#### 21.4 MongoDB
MongoDB는 문서 지향 NoSQL 데이터베이스입니다. `pymongo` 라이브러리를 사용하여 MongoDB와 상호작용할 수 있습니다. 먼저 라이브러리를 설치해야 합니다.
```sh
pip install pymongo
```
##### 21.4.1 데이터베이스 연결
```python
from pymongo import MongoClient
# 데이터베이스 연결
client = MongoClient('localhost', 27017)
db = client['test_db']
collection = db['users']
# 데이터 삽입
user = {'name': 'David', 'age': 40}
collection.insert_one(user)
# 데이터 조회
for user in collection.find():
print(user)
# 데이터 업데이트
collection.update_one({'name': 'David'}, {'$set': {'age': 41}})
# 데이터 삭제
collection.delete_one({'name': 'David'})
# 연결 닫기
client.close()
```
#### 21.5 ORM (객체 관계 매핑)
ORM(Object-Relational Mapping)은 객체 지향 프로그래밍 언어를 사용하여 데이터베이스와 상호작용할 수 있도록 하는 기술입니다. 파이썬에서는 `SQLAlchemy` 라이브러리를 사용하여 ORM을 구현할 수 있습니다. 먼저 라이브러리를 설치해야 합니다.
```sh
pip install sqlalchemy
```
##### 21.5.1 SQLAlchemy 사용 예제
```python
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')
Base = declarative_base()
# 모델 정의
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String)
age = Column(Integer)
# 테이블 생성
Base.metadata.create_all(engine)
# 세션 생성
Session = sessionmaker(bind=engine)
session = Session()
# 데이터 삽입
new_user = User(name='Eve', age=28)
session.add(new_user)
session.commit()
# 데이터 조회
users = session.query(User).all()
for user in users:
print(user.name, user.age)
# 세션 닫기
session.close()
```
이상으로, 파이썬에서 다양한 데이터베이스와 상호작용하는 방법에 대해 알아보았습니다. 다음 장에서는 기타 유용한 파이썬 모듈에 대해 더 자세히 알아보겠습니다. 질문이나 요청사항이 있으시면 댓글로 남겨주세요!
---
이 글의 내용은 GoalKicker.com의 Python Notes for Professionals 책을 참조하였습니다.
댓글
댓글 쓰기