AWS CLI, Boto3

DynamoDB with Boto3(Python) 4편

Joon0464 2021. 7. 18. 16:56

1. Query & Scan

Query는 특정 값을 검색했을 때 나타나는 결과를 조회할 때 사용된다.

get_items()와 기능이 유사하지만 query가 더 자세한 조건을 통해 값을 가져오는것이 가능하다.

 

Scan은 Query와 다르게 특정 ㄱ밧을 지정하여 불러올 수도 있지만, 주로 호출하고자 하는 값의 범위를 검색 조건으로 할 때 사용된다. FilterExpression을 내부 속성으로써 필터링을 위한 용도로 사용된다.

 

Query와 Scan을 사용하기 위해서는 아래에 작성된 것처럼 추가 클래스 호출이 필요하다.

from boto3.dynamodb.conditions import Key, Attr

 

Query

# query.py

import boto3
from boto3.dynamodb.conditions import Key, Attr
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('users')
response = table.query(
    KeyConditionExpression=Key('username').eq('johndoe')
)
items = response['Items']
print(items)

예제 코드는 위와 같다. 코드는 username 키가 johndoe값을 가지는 items를 출력하기 위해 작성되었다.

코드를 실행하면 바로 결과값이 출력된다. 결과값에서 johndoe의 items가 출력된다.

 

Scan

# scan.py

import boto3
from boto3.dynamodb.conditions import Key, Attr
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('users')
response = table.scan(

    FilterExpression=Attr('age').lt(27)

)

items = response['Items']

print(items)

예제 코드는 위와 같다. FilterExpression을 사용하여 나이를 지정하고 lt(less than)을 27로 지정하여 age가 27보다 작은 items를 테이블에서 scan한다.

scan.py를 실행하면 위와 같이 결과가 출력된다.

# scan2.py

import boto3
from boto3.dynamodb.conditions import Key, Attr
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('users')
response = table.scan(
    FilterExpression=Attr('first_name').begins_with('J') & Attr('account_type').eq('super_user')
)
items = response['Items']
print(items)

위 코드는 first_name 값이 J로 시작(begins_with)하고 account_type이 super_user와 동일한 대상에 대해 값을 출력하는 것이다.

코드를 실행하면 조건에 맞는 결과물이 출력된 것을 볼 수 있다.

# scan3.py

import boto3
from boto3.dynamodb.conditions import Key, Attr
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('users')
response = table.scan(
    FilterExpression=Attr('address.state').eq('CA')
)
items = response['Items']
print(items)

세 번째 예제 코드는 address.state 속성값이 CA와 같은(eq) 값을 scan하여 출력하는 것이다.

코드를 실행하면 조건에 맞는 결과가 출력된다.