SQLite 설정 수정(이해 x..)

jurin·2020년 12월 27일
0

플라스크 - python

목록 보기
13/17

책 '점프 투 플라스크'를 공부하면서 정리한 내용입니다.
출처 : https://wikidocs.net/book/4542

SQLite DB는 ORM을 사용할 때 발생시킬 수 있는 몇 가지 오류가 있다.

__init__.py 파일 수정

SQLite DB에서 사용하는 인덱스 등의 제약 조건 이름은 MetaData 클래스를 사용하여 규칙을 정의해야 한다.

이름을 정의하지 않으면 SQLite DB는 오류를 발생시킴

ValueError: Constraint must have a name

또한 SQLite DB는 migrate.init_app(app, db, render_as_batch=True)에서 지정한 것처럼 render_as_batch 속성을 True로 지정해야 한다.

이 속성이 False라면 다음과 같은 '제약 조건의 변경을 지원하지 않는다'는 오류 발생

ERROR [root] Error: No support for ALTER of constraints in SQLite dialectPlease refer to the batch mode feature which allows for SQLite migrations using a copy-and-move strategy.
from flask import Flask
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
# --------------------------------- [edit] ---------------------------------- #
from sqlalchemy import MetaData
# --------------------------------------------------------------------------- #

import config

# --------------------------------- [edit] ---------------------------------- #
naming_convention = {
    "ix": 'ix_%(column_0_label)s',
    "uq": "uq_%(table_name)s_%(column_0_name)s",
    "ck": "ck_%(table_name)s_%(column_0_name)s",
    "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
    "pk": "pk_%(table_name)s"
}
db = SQLAlchemy(metadata=MetaData(naming_convention=naming_convention))
migrate = Migrate()
# --------------------------------------------------------------------------- #

def create_app():
    app = Flask(__name__)
    app.config.from_object(config)

    # ORM
    db.init_app(app)
# --------------------------------- [edit] ---------------------------------- #
    if app.config['SQLALCHEMY_DATABASE_URI'].startswith("sqlite"):
        migrate.init_app(app, db, render_as_batch=True)
    else:
        migrate.init_app(app, db)
# --------------------------------------------------------------------------- #
    from . import models
    (... 생략 ...)

DB 변경

위의 __init__.py 파일을 수정하면 DB의 제약 조건 이름이 변경 되므로 flask db migrate 명령과 flask db upgrade 명령으로 DB를 변경해 줘야 한다.

(myproject) c:\projects\myproject>flask db migrate
(myproject) c:\projects\myproject>flask db upgrade
profile
anaooauc1236@naver.com

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN