본문 바로가기

About/Flask

[Flask] Flask-SQLAlchemy 사용해보기

Flask-SQLAlchemy는 Flask의 확장 모듈로 데이터베이스 ORM입니다.(Object Relational Mapping)

https://flask-sqlalchemy.palletsprojects.com/en/2.x/quickstart/

 

Quickstart — Flask-SQLAlchemy Documentation (2.x)

Quickstart Flask-SQLAlchemy is fun to use, incredibly easy for basic applications, and readily extends for larger applications. For the complete guide, checkout the API documentation on the SQLAlchemy class. Installation Install and update using pip: $ pip

flask-sqlalchemy.palletsprojects.com

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에 대해서 알아보았습니다.