반응형
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 |