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?