tutorial not create python sqlalchemy flask-sqlalchemy

python - not - sqlalchemy tutorial



Consulta de matraz SQLAlchemy, especifique nombres de columna (5)

¿Cómo especifico la columna que deseo en mi consulta utilizando un modelo (selecciona todas las columnas de forma predeterminada)? Sé cómo hacer esto con la sesión sqlalchmey: session.query(self.col1) , pero ¿cómo lo hago con los modelos? No puedo hacer SomeModel.query() . ¿Hay alguna manera?


Puede usar Model.query , porque se Model.query al Model (o generalmente su clase base, especialmente en los casos en que se usa una extensión declarativa). En este caso, Model.query es equivalente a Session.query(Model) .

No conozco la forma de modificar las columnas devueltas por la consulta (excepto al agregar más usando add_columns() ).
Así que tu mejor Session.query(Model.col1, Model.col2, ...) es usar Session.query(Model.col1, Model.col2, ...) (como ya lo mostró Salil).


Puede usar el método with_entities() para restringir qué columnas desea devolver en el resultado. ( documentation )

result = SomeModel.query.with_entities(SomeModel.col1, SomeModel.col2)

Dependiendo de sus requisitos, también puede encontrar útiles los deferreds . Le permiten devolver el objeto completo pero restringir las columnas que pasan por el cable.


Puedes usar la función load_only :

from sqlalchemy.orm import load_only fields = [''name'', ''addr'', ''phone'', ''url''] companies = session.query(Company).options(load_only(*fields)).all()

donde ''Compañía'' es su modelo (en su caso es SomeModel)


Un ejemplo aquí:

movies = Movie.query.filter(Movie.rating != 0).order_by(desc(Movie.rating)).all()

Solicito películas a la base de datos con calificación <> 0, y luego las ordeno clasificando con la calificación más alta primero.

Eche un vistazo aquí: Seleccionar, Insertar, Eliminar en Flask-SQLAlchemy


session.query.with_entities(SomeModel.col1)

es lo mismo que

session.query(SomeModel.col1)

para alias, podemos usar .label ()

session.query(SomeModel.col1.label(''some alias name''))