programing

플라스크 SQL 화학 쿼리, 열 이름 지정

lastcode 2023. 6. 11. 10:42
반응형

플라스크 SQL 화학 쿼리, 열 이름 지정

모델을 사용하여 쿼리에서 원하는 열을 지정하려면 어떻게 해야 합니까(기본적으로 모든 열이 선택됨)?sqlalchmy 세션을 사용하는 방법을 알고 있습니다.session.query(self.col1)하지만 모델을 어떻게 사용해야 합니까?할 수 없습니다SomeModel.query()방법이 있습니까?

사용할 수 있습니다.with_entities()결과에 반환할 열을 제한하는 방법.(해석)

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

요구 사항에 따라 지연이 유용할 수도 있습니다.이 명령을 사용하면 전체 개체를 반환할 수 있지만 와이어를 통해 전달되는 열은 제한할 수 있습니다.

session.query().with_entities(SomeModel.col1)

와 동일합니다.

session.query(SomeModel.col1)

별칭의 경우 .label()을 사용할 수 있습니다.

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

load_only 함수를 사용할 수 있습니다.

from sqlalchemy.orm import load_only

fields = ['name', 'addr', 'phone', 'url']
companies = session.query(SomeModel).options(load_only(*fields)).all()

사용할 수 있습니다.Model.query왜냐하면Model(또는 일반적으로 기본 클래스, 특히 선언적 확장이 사용되는 경우)이 할당됩니다.이 경우에는Model.query와 동등합니다.Session.query(Model).

쿼리에서 반환된 열을 수정하는 방법을 알지 못합니다(를 사용하여 추가하는 경우 제외).
그래서 당신의 최선의 방법은Session.query(Model.col1, Model.col2, ...)(이미 Salil에 표시된 바와 같이).

Query.values, Query.values를 사용할 수 있습니다.

session.query(SomeModel).values('id', 'user')

저는 주로 다음 스니펫을 사용합니다.

fields = ["col1", "col2", ...]\
session.query(map(lambda x: getattr(SomeModel.c, x), fields))

result = ModalName.query.add_columns(ModelName.colname, ModelName.colname)

~하듯이session.query(SomeModel.col1)이와 같은 튜플 배열을 반환합니다.[('value_1',),('value_2',)]일반 배열로 결과를 캐스트하려면 다음 문 중 하나를 사용하여 결과를 캐스트할 수 있습니다.

values = [value[0] for value in session.query(SomeModel.col1)]
values = [model.col1 for model in session.query(SomeModel).options(load_only('col1'))]

결과:

 ['value_1', 'value_2']

특정 열이 있는 엔티티를 가져오는 대체 구문:

any_query.with_entities(Entity).options(load_only(Entity.col))

언급URL : https://stackoverflow.com/questions/11530196/flask-sqlalchemy-query-specify-column-names

반응형