programing

declarative_base ()와 db.Model의 차이점은 무엇입니까?

nasanasas 2020. 11. 12. 08:20
반응형

declarative_base ()와 db.Model의 차이점은 무엇입니까?


빠른 시작 자습서 플라스크-SQLAlchemy의 플러그인에 지시 사용자가 상속 테이블 모델을 생성하는 db.Model클래스를, 예를 들어,

app = Flask(__main__)
db = SQLAlchemy(app)
class Users(db.Model):
    __tablename__ = 'users'
    ...

그러나 SQLAlchemy 자습서 와 bottle-SQLAlchemy README는 모두 테이블 모델 Basedeclarative_base().

Base = declarative_base()
class Users(Base):
    __tablename__ = 'users'
    ...

이 두 가지 접근 방식의 차이점은 무엇입니까?


Flask-SQLAlchemy 소스 코드를 보면 db.Model클래스가 다음과 같이 초기화됩니다.

self.Model = self.make_declarative_base()

그리고 make_declarative_base()방법 은 다음과 같습니다 .

def make_declarative_base(self):
    """Creates the declarative base."""
    base = declarative_base(cls=Model, name='Model',
                            metaclass=_BoundDeclarativeMeta)
    base.query = _QueryProperty(self)
    return base

_BoundDeclarativeMeta메타 클래스는 SQLAlchemy의의의 서브 클래스 DeclarativeMeta, 단순히에 대한 기본 값 계산에 대한 지원을 추가 __tablename__(테이블 이름) 또한 핸들의 바인딩에.

base.query속성을 사용하면 Flask-SQLAlchemy 기반 모델 Model.query이 SQLAlchemy의 session.query(Model).

_QueryProperty쿼리 클래스도 SQLAlchemy의의 쿼리에서 서브 클래스된다. Flask-SQLAlchemy 하위 클래스는 SQLAlchemy에없는 세 가지 추가 쿼리 메서드 인 get_or_404(), first_or_404()paginate().

나는 이것이 유일한 차이점이라고 믿습니다.

참고 URL : https://stackoverflow.com/questions/22698478/what-is-the-difference-between-the-declarative-base-and-db-model

반응형