SQLAlchemy에서 SQL 문을 직접 작성하여 데이터를 조회할 때 다음과 같은 방식을 취할 수 있습니다. 최근 회원 가입한 5명 유저의 이름을 조회해야 하는 상황을 가정하고 아래 쿼리를 작성했습니다.
result = engine.execute('SELECT name FROM user ORDER BY idx LIMIT 5;')
user_names = result.fetchall()
이렇게 해주면 user_names에는 유저의 이름이 튜플의 리스트로 다음과 같은 형태로 들어가 있습니다.
[('개똥이',), ('말똥이',), ('소똥이',), ('닭똥이',), ('양똥이',)]
만약 이 중에서 "개똥이"만 선택하고 싶다면, user_names[0][0] 과 같이 인덱싱 해주면 됩니다.
그런데 직관적으로 봤을 때 result를 print 하면 거기에 데이터가 있을 것 같은데 그렇지 않습니다. result를 print 해보면 다음과 같은 내용이 콘솔에 출력됩니다. 주소 같은 것이 나오는 걸로 봐서 뭔가 포인터 같은 느낌이죠.
이렇게 출력되는 친구에게 result[0] 이런 식으로 인덱싱을 시도하면, 오류가 납니다. 다음과 같이 말이죠.
LegacyCursorResult 객체는 subscriptable이 아니라고 합니다. 제 경험상 이런 에러가 뜨는 것들은 인덱싱이나 슬라이싱 지원이 안되는 객체들입니다.
아무튼 정리하자면 fetchall() 메소드를 사용해야 데이터 조회한 결과를 얻을 수 있다는 것입니다.
'Dev > python' 카테고리의 다른 글
[pandas] 컬럼 값이 특정 조건에 부합하는 행들의 특정 컬럼 값 수정하기 (0) | 2022.10.02 |
---|---|
[pandas] 데이터프레임 행 또는 컬럼 삭제하기, drop() 메소드 (0) | 2022.10.01 |
[python] 010-1234-5678과 같은 전화번호 문자열에서 하이픈(-) 빼기 (0) | 2022.09.21 |
[python] 클래스(class), 객체(object), 인스턴스(instance) 용어 정리 (0) | 2022.09.21 |
[python] 딕셔너리 키 리스트, 값 리스트 생성하기 (7) | 2022.09.06 |
[python, opencv] 이미지에 한글 텍스트 삽입하기, pillow 활용 (0) | 2022.09.04 |
[flask] Ajax로 json 데이터 post 전달시 flask 서버 get_json() 관련 오류 해결 방법 (0) | 2022.08.29 |
[python] 함수를 매개변수로 전달할 때 많이 사용되는 람다(lambda) (2) | 2022.08.23 |