Flask-SQLAlchemy는 Flask의 확장 모듈로 데이터베이스 ORM입니다.(Object Relational Mapping)
https://flask-sqlalchemy.palletsprojects.com/en/2.x/quickstart/
ORM이란 한 가지 언어만으로 데이터베이스 데이터를 다루 수 있는 기술입니다. SQL 데이터베이스와 통신하려면 SQL 문법을 써야하는데, ORM은 SQL문을 자동으로 생성해 파이썬 클래스 객체와 데이터베이스 사이를 중개합니다. (SQL 문법을 몰라도 파이썬 문법으로 데이터베이스를 사용할 수 있게 해줌!)
본래 SQLAlchemy는 독립 파이썬 모듈이었으나, Flask-SQLAlchemy는 SQLAlchemy를 Flask에서 사용하게 만들어주는 Flask 확장 모듈로 만들어졌습니다.
Flask-SQLAlchemy 설치
pip 모듈을 이용하여 다음과 같이 Flask-SQLAlchemy를 설치합니다.
pip install -U Flask-SQLAlchemy
python3.9, flask_sqlalchemy ‘2.5.1’ 버전을 사용하였습니다.
Flask-SQLAlchemy를 사용
# db.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URL'] = 'sqlite:////tmp/test.db' # 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
SQLAlchemy를 통해 db라는 변수를 생성하였고, db.Model을 상속받아 User 클래스를 생성하였습니다.
User는 id(자동 생성, primary key), username(String), email(String)으로 이루어져있습니다.
이제 Python Shell을 열어 사용해보면 다음과 같습니다.
>>> from db import db
>>> db.create_all()
db(SQLAlchemy)를 import 한 후 db.create_all() 함수를 이용하여 테이블과 데이터베이스를 생성합니다.
그 후 User(Model)을 import 하여 데이터를 생성합니다.
>>> from db import User
>>> admin = User(username='admin', email='admin@example.com')
>>> guest = User(username='guest', email='guest@example.com')
위의 코드를 실행하더라도 아직 데이터베이스에 저장된 것은 아니며 다음 코드를 실행하면 데이터베이스에 저장되게 됩니다.
>>> db.session.add(admin)
>>> db.session.add(guest)
>>> db.session.commit()
그러면 이제 데이터를 쿼리해보겠습니다
>>> User.query.all()
[<User u'admin'>, <User u'guest'>]
>>> User.query.filter_by(username='admin').first()
<User u'admin'>
<Model>.query.all() 함수를 이용하여 모든 데이터를 쿼리하면 아까 생성하였던 데이터가 출력됩니다. 또한 <Model>.query.filter_by() 함수를 이용하여 특정 데이터만 가져올 수도 있습니다.
(출력 방식은 User 클래스의 __repr__() 함수에서 정의한 형식으로 출력이 됩니다.)
Flask SQLAlchemy에 대해서 알아보았습니다.
'About > Flask' 카테고리의 다른 글
[Flask] 비동기 호출(태스크 큐, 토픽 큐, RabbitMQ) (0) | 2022.01.04 |
---|---|
[Flask] Session 객체를 이용한 동기식 호출 (0) | 2021.12.31 |
[Flask] 에러 처리 (사용자 정의 에러 핸들러, JSON 에러 핸들러) (0) | 2021.12.13 |
[Flask] Jinja2 템플릿을 이용한 이메일 생성 (0) | 2021.12.13 |
[Python] Flask Signal (Blinker) (0) | 2021.09.25 |