[PYTHON] SQLAlchemy에서 튜플 대신 속성 목록 쿼리
PYTHONSQLAlchemy에서 튜플 대신 속성 목록 쿼리
모델의 ID를 쿼리하고, ID 목록 대신 (int,) 튜플 목록을 얻습니다. 속성을 직접 질의하는 방법이 있습니까?
result = session.query(MyModel.id).all()
나는 그것이 가능하다는 것을 깨닫는다.
results = [r for (r,) in results]
쿼리를 직접 처리하지 않고 해당 폼을 직접 반환 할 수 있습니까?
해결법
-
==============================
1.열과 같은 ORM 계기 설명자를 전달할 때 각 열은 하나의 열에 대해서만 명명 된 튜플입니다. 목록 이해를 위해 열 이름을 사용하여 목록을 '평평하게'만들 수 있습니다 (.all () 호출을 삭제할 수 있으며 반복은 객체를 가져옵니다).
열과 같은 ORM 계기 설명자를 전달할 때 각 열은 하나의 열에 대해서만 명명 된 튜플입니다. 목록 이해를 위해 열 이름을 사용하여 목록을 '평평하게'만들 수 있습니다 (.all () 호출을 삭제할 수 있으며 반복은 객체를 가져옵니다).
result = [r.id for r in session.query(MyModel.id)]
또는 for 루프를 반복 할 때 튜플이라는 사실을 사용하여 단일 요소 튜플의 대상에 압축을 풉니 다.
result = session.query(MyModel.id) for id, in result: # do something with the id
후자는 또한 목록 이해에 사용될 수 있습니다 :
[id for id, in session.query(MyModel.id)]
행 결과를 단일 id 값으로 강제로 설정할 수있는 옵션이 없습니다.
-
==============================
2.SQLalchemy가 적절한 해결책을 제공하지 않는다는 것은 이상한 일입니다. sqlalchemy에서 열과 같은 멤버 변수를 선택하면 각 결과는 @Martijn이 말한 바와 같이 명명 된 튜플입니다. 파이썬의 zip 함수를 사용하여 이것을위한 해결책을 찾았습니다.
SQLalchemy가 적절한 해결책을 제공하지 않는다는 것은 이상한 일입니다. sqlalchemy에서 열과 같은 멤버 변수를 선택하면 각 결과는 @Martijn이 말한 바와 같이 명명 된 튜플입니다. 파이썬의 zip 함수를 사용하여 이것을위한 해결책을 찾았습니다.
Zip 공식 문서
당신의보기에 오는
result = session.query(MyModel.id).all() result = zip(*result)[0]
산출:
[id1, id2, id3...]
그것은 당신이 같은 목록을 전달하는 경우 인수로 주어진 튜플 목록을 평평하게 어떻게 작동합니다
[(key11, key21), (key12,key22)]
Zip은이 튜플 목록을
[(key11, key12), (key21, key22)]
귀하의 경우에는 MyModel의 tupe의 모든 초기 값을 원하므로 목록에서 0 번째 튜플을 가져올 수 있습니다.
from https://stackoverflow.com/questions/48466959/query-for-list-of-attribute-instead-of-tuples-in-sqlalchemy by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 하위 프로세스 readline이 EOF를 기다리는 동안 중단됩니다. (0) | 2018.10.05 |
---|---|
[PYTHON] 32 비트 Windows 7 머신에서 Python 3.5에 scipy 설치 (0) | 2018.10.05 |
[PYTHON] 싱글 톤을 정의하는 간단하고 우아한 방법이 있습니까? [복제] (0) | 2018.10.05 |
[PYTHON] 2 개의 색인 목록을 가진 2D Numpy 배열의 색인 생성 (0) | 2018.10.05 |
[PYTHON] 파이썬 : 유효하지 않은 토큰 (0) | 2018.10.05 |