개발자의 길

[SQLAlchemy] SQLAlchemy 에서 DB 에 접근하는 방법 - 1

토아드 2023. 12. 11. 01:52
반응형

SQLALchemy 는 Python 언어의 서버 개발환경에서 사용할수있는 ORM 라이브러리중 하나이다. Flask 프레임워크로 작성된 서버에서 주로 이 ORM 을 사용하는데, SQLAlchemy 를 어떻게 사용하여 DB 에 접근하고 Table 에 있는 row 를 접근/제어하는 방법을 소개하고자 한다.

 

SQLAlchemy 객체로 데이터베이스 연결을 수립하는 방법

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'  # SQLite를 사용하는 예시
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

 

 Flask app 객체를 생성하며 DB 와 관련된 환경설정 값을 넣고, 해당 app 을 SQLAlchemy 에 넘기면 Flask app 객체와 연결된 SQLAlchemy 객체가 생성된다. 저렇게 생성된 객체로부터 'session' 이라는 객체를 얻어서 DB 의 table 에 접근/제어가 가능하다.

 table 에 접근하기 위해선 table 을 논리단위로 정의한 ORM 인 Model 객체가 필요한데 선언은 아래와 같이 하면 된다.

 

class User(db.Model):
    # __tablename__ = 'user' 이 코드를 사용해서 tablename 을 임의로 지정할 수 있다. 미지정 시에는 클래스이름의 소문자가 테이블이름이 된다
    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)

 

이와같이 선언한 다음 user 테이블에 접근은 아래와 같이 한다.

 

생성된 db 객체와 Model 로 table 에 접근하는 방법

def add_user(username, email):
    new_user = User(username=username, email=email)
    # session 에 생성한 객체를 추가하고, commit() 을 호출하여 해당 세션에 반영된 변경사항을 DB 에 반영한다
    db.session.add(new_user)
    db.session.commit()

def get_user(username):
    user = User.query.filter_by(username=username).first()
    return user

def delete_user(username):
    user = User.query.filter_by(username=username).first()
    if user:
        # session 에 가져온 객체를 지우는 작업을 추가하고, commit() 을 호출하여 해당 세션에 반영된 변경사항을 DB 에 반영한다
        db.session.delete(user)
        db.session.commit()

 

 

위 코드를 보면 알 수 있듯이 SQLAlchemy 는 session 이라는 개념을 이용해서 db 에 반영할 사항들을 저장해 두고, commit() 을 사용하여 db 에 반영한다. 사실 위 사항만 알아도 어느정도 db 에 접근하는 건 가능한데, session 이 어떻게 생성되고 언제 생성되는지, 다른 세션에 이미 세션에 반영된 객체를 넣으면 어떻게 되는지 등은 2번째 게시글에서 설명하겠다.

 

 

반응형