안녕하세요! 그레이 해커 월횽입니다. 오늘은 Flask와 데이터베이스 연동에 대해 알아보겠습니다. 웹 애플리케이션에서는 데이터를 저장하고 불러오는 작업이 필수적입니다. 이러한 기능을 구현하기 위해 데이터베이스와의 연동이 필요합니다. 오늘은 Flask에서 데이터베이스를 사용하는 방법과, SQLAlchemy라는 ORM(Object Relational Mapping) 라이브러리를 활용하여 데이터베이스와 상호작용하는 방법을 배워보겠습니다.
1. 데이터베이스의 기본 개념
데이터베이스는 정보를 구조적으로 저장하는 시스템입니다. 웹 애플리케이션에서 많이 사용하는 데이터베이스로는 MySQL, SQLite, PostgreSQL 등이 있습니다.
· SQLite: Python에 기본적으로 내장된 경량화된 데이터베이스로, 간단한 애플리케이션에 적합합니다.
· SQLAlchemy: Python의 강력한 ORM 라이브러리로, SQL을 직접 작성하지 않고 Python 코드로 데이터베이스를 조작할 수 있습니다.
2. Flask와 SQLite 연동하기
우선, SQLite와 Flask를 연동해 간단한 데이터를 저장하고 불러오는 작업을 해보겠습니다.
SQLAlchemy 설치
먼저 SQLAlchemy를 설치해야 합니다. 터미널에서 다음 명령어를 실행하세요.
pip install Flask-SQLAlchemy
기본적인 Flask와 SQLite 연동 예제
다음 코드로 간단한 데이터베이스 연동 웹 애플리케이션을 만들어 봅시다.
from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 데이터베이스 설정 (SQLite 사용)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydatabase.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# SQLAlchemy 객체 생성
db = SQLAlchemy(app)
# 데이터베이스 모델 정의
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return f'<User {self.name}>'
# 데이터베이스 초기화 (처음 한 번만 실행)
@app.before_first_request
def create_tables():
db.create_all()
@app.route('/')
def index():
return 'Flask와 데이터베이스 연동 예제입니다.'
if __name__ == '__main__':
app.run(debug=True)
이 코드를 실행하면 mydatabase.db라는 SQLite 데이터베이스 파일이 생성되고, User라는 테이블이 만들어집니다.
3. 데이터베이스에 데이터 삽입하기
Flask 애플리케이션에서 데이터를 삽입하려면 SQLAlchemy의 add와 commit 메서드를 사용합니다. 다음 코드를 통해 새로운 사용자를 데이터베이스에 추가할 수 있습니다.
@app.route('/add_user')
def add_user():
new_user = User(name='홍길동', email='hong@example.com')
db.session.add(new_user)
db.session.commit()
return '사용자가 추가되었습니다.'
이제 http://localhost:5000/add_user에 접속하면 사용자 정보가 데이터베이스에 저장됩니다.
4. 데이터베이스에서 데이터 조회하기
데이터베이스에 저장된 데이터를 조회하려면 SQLAlchemy의 query 메서드를 사용합니다. 다음 코드를 통해 저장된 모든 사용자를 조회할 수 있습니다.
@app.route('/users')
def get_users():
users = User.query.all() # 모든 사용자 조회
return render_template('users.html', users=users)
users.html 템플릿
<!DOCTYPE html>
<html>
<head>
<title>사용자 목록</title>
</head>
<body>
<h1>사용자 목록</h1>
<ul>
{% for user in users %}
<li>{{ user.name }} ({{ user.email }})</li>
{% endfor %}
</ul>
</body>
</html>
이제 http://localhost:5000/users에서 데이터베이스에 저장된 사용자 목록을 볼 수 있습니다.
5. 데이터 업데이트와 삭제
데이터베이스에서 데이터를 업데이트하거나 삭제하는 것도 매우 간단합니다.
데이터 업데이트
@app.route('/update_user/<int:id>')
def update_user(id):
user = User.query.get(id)
if user:
user.name = '김철수'
db.session.commit()
return '사용자 정보가 업데이트되었습니다.'
return '사용자를 찾을 수 없습니다.'
데이터 삭제
@app.route('/delete_user/<int:id>')
def delete_user(id):
user = User.query.get(id)
if user:
db.session.delete(user)
db.session.commit()
return '사용자가 삭제되었습니다.'
return '사용자를 찾을 수 없습니다.'
6. Flask와 데이터베이스 연동 정리
· Flask-SQLAlchemy를 사용하면 Python 코드로 간편하게 데이터베이스를 조작할 수 있습니다.
· 데이터베이스 모델을 정의하고, 데이터를 삽입, 조회, 업데이트, 삭제하는 방법을 배웠습니다.
· 더 복잡한 애플리케이션에서는 데이터베이스 관계, 필터링, 페이징 등의 기능도 추가할 수 있습니다.
다음 시간에는 Flask에서 사용자 인증 및 권한 부여에 대해 알아보겠습니다!
- 이전 수업 목록
'프로그래밍 > Python' 카테고리의 다른 글
[Python 강의] 22강 - Flask 애플리케이션 배포 (0) | 2024.10.29 |
---|---|
[Python 강의] 21강 - 사용자 인증 및 권한 부여 (0) | 2024.10.28 |
[Python 강의] 19강 - 웹 개발 기초 (0) | 2024.10.24 |
[Python 강의] 18강 - 네트워킹 프로그래밍 (0) | 2024.10.23 |
[Python 강의] 17강 - 병렬 처리 및 멀티스레딩 (0) | 2024.10.22 |