파이썬 Flask DB 연동하기(SQLAlchemy)

💜poiuyy0420·2021년 1월 21일
0

Flask

목록 보기
2/2
post-thumbnail

SQLite 연동

👀 Flask 웹서버 구동하고 난 뒤 DB연동을 해보겠다. 기존에는 항상 쿼리(질의문)을 사용했었다. 이번에는 ORM을 적용하여 SQLAlchemy를 사용해 보겠다.

sqlite는 따로 설치 과정 필요 없이 python 기본 패키지에 포함이 되어 있어 바로 사용 가능하다.🤳

SQLAlchemy

SQLAlchemy는 파이썬을 위한 ORM(Object-relational-mapping) 중 하나이다. ORM을 사용하면 SQL 질의어를 쓰지 않고, CRUD 등을 공통된 접근기법으로 사용할 수 있다.
Flask에서는 사용하기 쉽게 만들어진 Flask-SQLAlchemy가 있다.

일단 Flask-SQLAlchemy를 설치한다.

# flask-sqlalchemy 설치
(flask_evn) pip install flask-sqlalchemy

사용자 모델 추가

먼저 ORM으로 만들기 때문에 데이터 모델을 만들어야 한다.
project 폴더 내에 models.py에 만든다.

먼저 사용자 데이터 모델을 나타내는 객체를 하나 선언 한다.
그리고 SQLAlchemy의 기능을 사용하기 위해 db.Model을 상속 받는다. 기본적으로 데이터베이스 테이블 이름은 자동으로 정의되지만 __table_name__을 이용해 명시적으로 정할 수 있다.

테이블의 컬럼을 만들기 위해서는 db.Column()을 이용한다.
db.Column()은 데이터 타입에 대한 정보와 제약 조건들을 넣어줄 수 있다.

# models.py

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class User(db.Model):
    __tablename__ = 'user'
    
    id = db.Column(db.Integer, primary_key=True)
    userid = db.Column(db.String(32))
    password = db.Column(db.String(128))    

DB 연동

기존에 있던 app.py 에 추가한다.
SQLAlchemy 에서 사용할 데이터베이스를 설정하고 연결한다.
SQLALCHEMY_TRACK_MODIFICATIONS의 경우에는 추가적인 메모리를 필요로 하므로 False로 둔다. 설정하지 않으면 최신 버전에서는 Warning 메세지가 발생한다.

# app.py 추가내용

import os
from models import db

# 현재있는 파일의 디렉토리 절대경로
basdir = os.path.abspath(os.path.dirname(__file__))
# basdir 경로안에 DB파일 만들기
dbfile = os.path.join(basdir, 'db.sqlite')

# SQLAlchemy 설정

# 내가 사용 할 DB URI
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + dbfile
# 비지니스 로직이 끝날때 Commit 실행(DB반영)
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
# 수정사항에 대한 TRACK
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# SECRET_KEY
app.config['SECRET_KEY'] = 'jqiowejrojzxcovnklqnweiorjqwoijroi'

db.init_app(app)
db.app = app
db.create_all()

# app.py 전체 코드

import os
from models import db
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/register')
def register():
    return render_template('register.html')

@app.route('/')
def hello_world():
    return render_template('hello.html')

basdir = os.path.abspath(os.path.dirname(__file__))
dbfile = os.path.join(basdir, 'db.sqlite')

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + dbfile
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SECRET_KEY'] = 'jqiowejrojzxcovnklqnweiorjqwoijroi'

db.init_app(app)
db.app = app
db.create_all()

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=5000, debug=True)

DB 확인

가상환경에서 python app.py 실행하면 project 폴더 안에 db.sqlite 파일이 생긴다.

(flask_evn) python app.py

명령어로 테이블을 확인한다.

(flask_evn) sqlite3 db.sqlite

# 테이블 확인
sqlite> .tables
User

# 테이블 스키마 확인
sqlite> .schema User
CREATE TABLE user (
        id INTEGER NOT NULL,
        userid VARCHAR(32),
        password VARCHAR(128),
        PRIMARY KEY (id)
);
profile
안녕하세요 :)

0개의 댓글