python에서 사용하는 ORM인 SqlAlchemy를 flask에서 사용하기 편하도록 custom한 것이다.
SqlAlchemy와 동일한 기능을 하지만 더 간단하게 DB를 다룰 수 있도록 해준다.
사용하기 위해서 dependency를 설치해준다.
$> poetry add Flask-SQLAlchemy
기존의 SqlAlchemy를 사용하면,
까지 해주어야 DB 연결이 완료되어 사용이 가능해진다.
하지만 Flask-SqlSlchemy를 사용하면 flask에서만이라도 훨씬 단순화된 단계로 sqlachemy를 사용할 수 있다.
1. connection 생성 및 연결
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask()
app.config["SQLALCHEMY_DATABASE_URI"] = 'postgresql://usename:password@localhost:5432/postgres'
db = SQLAlchemy()
db.init_app(app)
2. 생성할 모델 만들기
생성할 모델을 선언하는 법은 기존의 SqlAlchemy와 동일한데, 다른 점은 Base(declaratibe_base)가 아니라 SQLAlchemy()의 Model을 상속받아서 만들어낸다.
class User(db.Model):
# 테이블의 이름
__tablename__ = "users"
id = Column("id", Integer, primary_key=True)
name = Column("name", String, nullable=False)
email = Column("email", String, nullable=False, unique=True)
password = Column("password", Unicode, nullable=False)
만일 테이블간의 relationship을 작성하고 싶다면, 다음과 같이 연결시킬 모델에 작성해주면 된다.
user_id = db.Column(db.Integer, db.ForeignKey(User.id))
# backref는 반대 관계 모델에서 표시되길 원하는 이름
user = db.relationship('User', backref="connections")
연결이 완료되었다면 별도로 session을 생성하지 않고도 데이터베이스 작업을 수행할 수 있다.
session 생성을 별도로 하지 않는 것 외에는 기존의 SqlAlchemy와 동일한 방식으로 사용하면 된다.
기존 SqlAlchemy에서 다음과 같이 사용했다면,
session.add(User(id, name, email, password))
session.commit()
Flask-SqlAlchemy에서는 SQLAlchemy 인스턴스의 session을 호출해서 다음과 같이 사용한다는 것이 조금 다르다.
db.session.add(User(id, name, email, password))
db.session.commit()