오도원입니다.

건강과 행복을 위하여

PNU DSC/Solution Challenge

Flask 04. FLask-SQLAlcemy

오도원공육사 2020. 3. 8. 23:46
반응형

MVC에서 flask는 controller에 필요한 것을 해준다. 라우팅을 하면서 어떤 로직을 수행할 것인지를 결정한다. 

 

SQLAlcemy는 Model부분을 도와주는 라이브러리이다. orm(object relational mapper)로서 파이썬 안에서 객체로 클래스나 함수로 사용할 수 있다. 

 

import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

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

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + dbfile
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

class Test(db.Model):
	__tablename__ = 'test_table'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32), unique=True)

db.create_all()

@app.route('/')
def hello():
	return 'Hello World!'

# sqlite라는 데이터베이스를 사용하는데 따로 설치없이 하나의 파일을 지정해서 그것을 데이터베이스로 사용한다.

# 프로젝트 폴더를 절대경로로 사용하기 위해 os라이브러리를 가져오고 절대경로를 설정한다.

톺아보기

import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

 

os 모듈은 파이썬을 이용해 파일을 복사하거나 디렉터리를 생성하고 특정 디렉터리 내의 파일 목록을 구하고자 할 때 사용한다. 데이터베이스 경로를 설정하기 위해서 가져온다.

 

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

 

현재 파일의 디렉토리의 절대경로가 나온다.

현재 디렉토리에 데이터베이스 파일을 만들었다.

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + dbfile 
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True 
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

teardown일 때 커밋을 한다.
teardown은 사용자가 요청하고 사용자한테 원하는 정보를 전달하면 이 순간이 teardown이다. 즉, 사용자 요청의 끝을 의미한다.
commit을 해야 쌓아져있던 동작을 실제 데이터베이스에 반영한다.

db = SQLAlchemy(app) 

 이제 db변수를 통해서 데이터를 넣기도 하고 모델을 만들기도 한다.

 

# db안에 있는 db.model 클래스를 지정해서 클래스를 만들게 되면 Test는 하나의 모델이 된다.
class Test(db.Model): # Test는 하나의 모델이 되었다. 현재 Test의 스키마는 클래스의 속성으로 설정한다.
    __tablename__ = 'test_table' # 데이터베이스에 들어갈 때 테이블 명을 지정.
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32), unique=True)
# 이 클래스를 통해서 데이터베이스에 접근하면 된다. 그 내부적인 것은 알 필요가 없다.

db.create_all() # 데이터베이스 생성 함수

이런 식으로 데이터베이스 역할을 하는 파일이 생성된다.

반응형

'PNU DSC > Solution Challenge' 카테고리의 다른 글

Flask 06. 회원가입 - Model  (0) 2020.03.09
Flask 05. Jinja2  (0) 2020.03.09
Flask 03. MVC  (0) 2020.03.08
Flask 02. 플라스크 구조  (0) 2020.03.08
Flask 01. 기본  (0) 2020.03.08