Jak określić kolumnę, którą chcę w zapytaniu za pomocą modelu (domyślnie wybiera wszystkie kolumny)? Wiem, jak to zrobić z sesją sqlalchmey: session.query(self.col1)
ale jak to zrobić z modelami? Nie mogę SomeModel.query()
. Czy jest jakiś sposób?
Jak określić kolumnę, którą chcę w zapytaniu za pomocą modelu (domyślnie wybiera wszystkie kolumny)? Wiem, jak to zrobić z sesją sqlalchmey: session.query(self.col1)
ale jak to zrobić z modelami? Nie mogę SomeModel.query()
. Czy jest jakiś sposób?
Odpowiedzi:
Możesz użyć tej with_entities()
metody, aby ograniczyć kolumny, które chcesz zwrócić w wyniku. ( dokumentacja )
result = SomeModel.query.with_entities(SomeModel.col1, SomeModel.col2)
W zależności od wymagań, przydatne mogą być również odroczone płatności. Pozwalają zwrócić cały obiekt, ale ograniczają kolumny przechodzące przez drut.
ID
pola konfliktu, które jest obecne w obu tabelach
.label()
stackoverflow.com/a/11535992/248616
session.query().with_entities(SomeModel.col1)
jest taki sam jak
session.query(SomeModel.col1)
dla aliasu możemy użyć .label ()
session.query(SomeModel.col1.label('some alias name'))
session.query().with_entities(SomeModel.col1)
Możesz użyć funkcji load_only :
from sqlalchemy.orm import load_only
fields = ['name', 'addr', 'phone', 'url']
companies = session.query(SomeModel).options(load_only(*fields)).all()
.first()
i .one()
(co spowoduje leniwe / niecierpliwe ładowanie pól i relacji), - można ustawić jako komponent zapytania
with_entities
jak podano w zaakceptowanej odpowiedzi, a zapytanie wybrało tylko te pola /.
Możesz użyć Model.query
, ponieważ Model
(lub zwykle jego klasa bazowa, szczególnie w przypadkach, gdy używane jest deklaratywne rozszerzenie) jest przypisana Sesssion.query_property
. W tym przypadku Model.query
jest odpowiednikiem Session.query(Model)
.
Nie znam sposobu modyfikowania kolumn zwracanych przez zapytanie (z wyjątkiem dodawania kolejnych za pomocą add_columns()
).
Więc najlepszym strzałem jest użycie Session.query(Model.col1, Model.col2, ...)
(jak już pokazał Salil).
Możesz użyć Query.values, Query.values
session.query(SomeModel).values('id', 'user')
Oto przykład:
movies = Movie.query.filter(Movie.rating != 0).order_by(desc(Movie.rating)).all()
Pytam w bazie danych o filmy z oceną <> 0, a następnie sortuję je według oceny z najwyższą oceną.
Spójrz tutaj: Wybierz, Wstaw, Usuń w Flask-SQLAlchemy