[Flask] Flask-SqlAlchemy 이용해서 DB 연결하기

강버섯·2022년 2월 17일
0

FLASK🧪

목록 보기
3/7

👉 Flask-SqlAlchemy?

python에서 사용하는 ORM인 SqlAlchemy를 flask에서 사용하기 편하도록 custom한 것이다.
SqlAlchemy와 동일한 기능을 하지만 더 간단하게 DB를 다룰 수 있도록 해준다.

👉 사용하기 전에

사용하기 위해서 dependency를 설치해준다.

$> poetry add Flask-SQLAlchemy

👉 연결 생성하기

기존의 SqlAlchemy를 사용하면,

  1. connection 생성을 위해 declarative_base를 선언하고
  2. engine을 생성하여 dsn 연결을 해준 다음
  3. 사용할 model과 schema를 작성한 후,
  4. session에 생성한 engine을 연결해주는 작업

까지 해주어야 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()
profile
무럭무럭 버섯농장

0개의 댓글