Flask에서 데이터베이스(DB)를 연동하는 가장 간단한 방법은 Flask-SQLAlchemy 라이브러리를 사용하는 것입니다.
설치를 들어가기 전에 잠깐! 용어 공부부터 하시죠
그럼 여기서 DB란 무엇일까요?
DB는 Database의 약자로, 컴퓨터 내에서 정보를 저장하고 관리하는 것을 말합니다.
다양한 종류의 DB가 있지만,
가장 많이 사용되는 것은 RDBMS(Relational Database Management System)입니다.
RDBMS에서는 데이터를 테이블 형식으로 저장하고 관리하며,
SQL(Structured Query Language)을 사용하여 데이터를 조작할 수 있습니다.
여기서 RDBMS란,
관계형 데이터베이스 관리 시스템으로,
데이터베이스의 각 테이블 간의 관계를 기술하여
데이터의 저장과 검색을 효율적으로 관리하는 시스템입니다.
RDBMS는 요즘 많이 유행하는 NoSQL 데이터베이스와 다른 점이 있습니다.
NoSQL 데이터베이스는 관계형 모델을 사용하지 않고,
대신 다양한 데이터 형식(JSON, XML, Key-Value 등)을 지원합니다.
또한, NoSQL 데이터베이스는 스케일링에 더 유연한 구조를 제공합니다.
그러나, RDBMS에 비해 트랜잭션 처리, 데이터 정규화 등의 기능이 부족할 수 있습니다.
공부할게 참 많죠?
자세한 건 다른 포스팅으로 알려 드릴 테니 요 정도로만 이해해 주시면 좋을 것 같네요!
자! 그럼 본론으로 돌아와서 설치부터 하겠습니다
Flask-SQLAlchemy는 SQLAlchemy와 Flask를 결합한 라이브러리로, Flask 애플리케이션에서 SQLAlchemy ORM을 쉽게 사용할 수 있도록 도와줍니다.
사용하기 위해서는 먼저 Flask-SQLAlchemy 라이브러리를 설치해야 합니다:
pip install flask-sqlalchemy
그리고, Flask 객체에 SQLAlchemy 인스턴스를 생성하고,
데이터베이스 URI를 지정하여 SQLAlchemy를 초기화합니다.
위 내용을 한 줄 한 줄 구현해 볼까요?
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
플라스크를 호출한 후,
SQLAlchemy 라이브러리 호출 - Flask-SQLAlchemy 라이브러리를 호출하여 SQLAlchemy 객체를 생성합니다
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)
- Flask 객체 생성 - Flask 객체를 생성하고, __name__ 변수를 전달하여 Flask 애플리케이션을 생성합니다.
- 애플리케이션 구성 - Flask 애플리케이션 구성을 위해 'SQLALCHEMY_DATABASE_URI' 키를 추가하여 SQLite 데이터베이스의 경로를 지정합니다.(여기에 디비 경로를 지정해 줍니다!)
- SQLAlchemy 초기화 - Flask 객체와 Flask 애플리케이션 구성을 SQLAlchemy 객체에 전달하여 SQLAlchemy 애플리케이션을 초기화합니다.
이렇게 초반부 세팅을 해줍니다
위의 코드에서, SQLALCHEMY_DATABASE_URI 설정은 SQLite 데이터베이스를 사용하며, 파일 이름이 test.db인 데이터베이스를 사용한다는 것을 의미합니다.
이제, SQLAlchemy ORM을 사용하여 데이터베이스 모델을 정의할 수 있습니다.
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return '<User %r>' % self.username
이제 User 모델을 정의했습니다. id와, email 칼럼을 가지고 있으며, nullable은 False로 설정되어 값이 없으면 예외가 발생합니다. __repr__ 메서드는 객체의 문자열 표현을 정의하는 것으로, 개발자가 객체를 확인하기 쉽도록 도와줍니다.
위 코드는 SQLAlchemy ORM을 사용하여 데이터베이스 모델을 정의한 것입니다.
디테일하게 알려 드린다면,
- id: 고유한 사용자 식별자, db.Column으로 정의하며 db.Integer 타입으로, primary_key를 True로 설정하여 기본 키로 설정합니다.
- username: 사용자의 이름, db.Column으로 정의하며 db.String(80) 타입으로, unique를 True로 설정하여 고유한 값으로 설정하고 nullable을 False로 설정하여 NULL 값이 아닌 값으로 설정합니다.
- email: 사용자의 이메일, db.Column으로 정의하며 db.String(120) 타입으로, unique를 True로 설정하여 고유한 값으로 설정하고 nullable을 False로 설정하여 NULL 값이 아닌 값으로 설정합니다.
- __repr__: 인스턴스의 문자열 표현을 정의하는 특수 메서드입니다.
자 이제 데이터 베이스 모델을 생성해 볼까요?
db.create_all()
위 코드를 추가하여 데이터베이스 모델을 생성할 수 있습니다.
자 이제 위에서 작성한 코드를 기반으로 데이터 베이스에 저장해 보겠습니다
user = User(username='johndoe', email='johndoe@example.com')
db.session.add(user)
db.session.commit()
위 코드를 사용하여 User 데이터를 데이터베이스에 저장할 수 있습니다.
+) 질문! 데이터 베이스에 저장된 모든 User 정보를 불러오려면 어떻게 할까요?
User.query.all()
위 코드를 사용하여 데이터베이스에 저장된 모든 User 데이터를 가져올 수 있습니다.
전체 코드 보시죠!
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return '<User %r>' % self.username
db.create_all()
user = User(username='johndoe', email='johndoe@example.com')
db.session.add(user)
db.session.commit()
User.query.all()
자 이렇게 오늘은 Flask 애플리케이션에서 SQLAlchemy ORM을 사용하여 데이터베이스와 연동하는 방법에 대해 알아봤습니다. 다음 시간에는 더 다양한 Flask 기능들에 대해 소개드리겠습니다
그럼 다음 포스트도 기대해 주세요
안녕..!
'인공지능 교육' 카테고리의 다른 글
(밑바닥부터 탄탄한) 논문 기반 영상 처리 딥러닝 모델 설계 (0) | 2023.02.17 |
---|---|
성균관대학교&인하대학교&경기대학교 헬스케어 프로젝트 강의 (0) | 2023.02.01 |
전주 문화 산업 진흥센터 - 인공지능 기초 강의 후기 (0) | 2023.01.17 |
댓글