[Dynamo DB] boto3 - Query & Scan

Nam Eun-Ji·2020년 11월 28일
0

Scan
모든 데이터를 가져온 후 조건을 걸 수 있다.

Query
해시(기본)키에 특정 값을 지정하고, 범위 (기본)키에 조건을 지정하여 원하는 데이터를 가져온다. 범위 (기본)키에 조건을 지정하는 것은 생략할 수 있다.




import

query와 scan을 사용하기 위해서는 boto3를 import하는 것 외에도 추가 클래스를 호출해야한다.

import boto3
from boto3.dynamodb.conditions import Key, Attr



속성

속성내용
EQ / NE같다 / 같지 않다
LE / LT~보다 작거나 같다 / ~보다 작다
GE / GT~보다 크거나 같다 / ~보다 크다
NOT_NULL / NULL속성이 존재 / 속성이 존재하지 않음
CONTAINS / NOT_CONTAINS포함되어 있다 / 포함되어 있지 않다
BEGINS_WITH~로 시작하다(비교대상은 String or Binary만 가능)
INlist안에 포함되어있는지 체크
BETWEENA보다 같거나 크고 B보다 작거나 같다



※ 현재 내가 테스트하고자하는 테이블


Query

KeyConditionExpression을 이용하여 조건 검색 가능

예) order_id 가 1인 데이터 가져오기

client = boto3.client('dynamodb')
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('lastordr_order')

response = table.query(
    KeyConditionExpression = Key('order_id').eq(1)
)


Scan

  • scan 메서드는 테이블 전체의 모든 항목을 읽고 테이블의 모든 데이터를 반환
  • FilterExpression을 이용하여 조건 검색 가능하나 필터는 테이블 전체를 스캔한 후에 적용된다.
  • 자세한 내용은 boto3 공식문서에서 확인 바람

예제 1
item_id가 1인 데이터 가져오기

response = table.scan(
    FilterExpression = Attr('item_id').eq(1)
)


예제 2
'updated_at' 이 '2019-11-28' 로 시작하는 데이터 가져오기

response = table.scan(
    FilterExpression = Attr('updated_at').begins_with('2019-11-28')
)

위의 결과값을 보면 쿼리에 대한 추가적인 내용이 전달되는 것을 확인할 수 있다.

response["Count"]
>>> 2

예제 3
'updated_at'이 '2019-11-27'로 시작하면서 'item_name'이 '아메리카노'인 데이터 가져오기

response = table.scan(
    FilterExpression=Attr('updated_at').begins_with('2019-11-27') & Attr('item_name').eq('아메리카노')
)
response['Items']

profile
한 줄 소개가 자연스러워지는 그날까지

0개의 댓글