Scan
모든 데이터를 가져온 후 조건을 걸 수 있다.
Query
해시(기본)키에 특정 값을 지정하고, 범위 (기본)키에 조건을 지정하여 원하는 데이터를 가져온다. 범위 (기본)키에 조건을 지정하는 것은 생략할 수 있다.
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만 가능) |
IN | list안에 포함되어있는지 체크 |
BETWEEN | A보다 같거나 크고 B보다 작거나 같다 |
※ 현재 내가 테스트하고자하는 테이블
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)
)
예제 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']