update query datatypes python sqlalchemy flask bottle flask-sqlalchemy

python - query - pagination in flask sqlalchemy



¿Cuál es la diferencia entre declarative_base() y db.Model? (1)

En el código fuente de Flask-SQLAlchemy, la clase db.Model se inicializa de la siguiente manera:

self.Model = self.make_declarative_base()

Y aquí está el método 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

La metaclassBoundDeclarativeMeta es una subclase de DeclarativeMeta de SQLAlchemy, simplemente agrega soporte para calcular un valor predeterminado para __tablename__ (el nombre de la tabla) y también para manejar binds.

La propiedad base.query permite que los modelos basados ​​en Flask-SQLAlchemy accedan a un objeto de consulta como Model.query lugar de Model.query de SQLAlchemy session.query(Model) .

La clase de consulta _QueryProperty también se subclasifica desde la consulta de SQLAlchemy. La subclase Flask-SQLAlchemy agrega tres métodos de consulta adicionales que no existen en SQLAlchemy: get_or_404() , first_or_404() y paginate() .

Creo que estas son las únicas diferencias.

El tutorial de inicio rápido para el complemento Flask-SQLAlchemy indica a los usuarios que creen modelos de tablas que hereden la clase db.Model , por ej.

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

Sin embargo, el tutorial de SQLAlchemy y el archivo SAME-LITE le sugieren que los modelos de tabla heredan una Base instanciada de declarative_base() .

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

¿Cuál es la diferencia entre estos dos enfoques?