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 책을 참조하였습니다.

댓글