728x90
데이터 쿼리 및 스캔
- query 메서드를 사용하여 테이블에서 데이터를 조회할 수 있습니다
1. 쿼리
- 1985년 개봉한 데이터 조회
- MoviesQuery01.py로 저장 및 실행
- Boto3 SDK는 boto3.dynamodb.conditions에서 가져온 Key 및 Attr 함수를 사용할 때 ConditionExpression을 구성함
import boto3
from boto3.dynamodb.conditions import Key
def query_movies(year, dynamodb=None):
if not dynamodb:
dynamodb = boto3.resource('dynamodb', endpoint_url="http://localhost:8000")
table = dynamodb.Table('Movies')
response = table.query(
KeyConditionExpression=Key('year').eq(year)
)
return response['Items']
if __name__ == '__main__':
query_year = 1985
print(f"Movies from {query_year}")
movies = query_movies(query_year)
for movie in movies:
print(movie['year'], ":", movie['title'])
- 1992년 특정 이름일 가진 데이터 추출
- MoviesQuery02.py로 저장 및 실행
from pprint import pprint
import boto3
from boto3.dynamodb.conditions import Key
def query_and_project_movies(year, title_range, dynamodb=None):
if not dynamodb:
dynamodb = boto3.resource('dynamodb', endpoint_url="http://localhost:8000")
table = dynamodb.Table('Movies')
print(f"Get year, title, genres, and lead actor")
# Expression attribute names can only reference items in the projection expression.
response = table.query(
ProjectionExpression="#yr, title, info.genres, info.actors[0]",
ExpressionAttributeNames={"#yr": "year"},
KeyConditionExpression=
Key('year').eq(year) & Key('title').between(title_range[0], title_range[1])
)
return response['Items']
if __name__ == '__main__':
query_year = 1992
query_range = ('A', 'L')
print(f"Get movies from {query_year} with titles from "
f"{query_range[0]} to {query_range[1]}")
movies = query_and_project_movies(query_year, query_range)
for movie in movies:
print(f"\n{movie['year']} : {movie['title']}")
pprint(movie['info'])
2. scan함수
- 테이블 전체의 모든 항목을 읽고 테이블의 모든 데이터를 반환합니다.
- MoviesScan.py로 저장 및 실행
- filter_expression을 사용해서 그 결과 기준과 일치하는 항목만 반환.
- ProjectionExpression은 스캔 결과에서 원하는 속성만 지정합니다.
from pprint import pprint
import boto3
from boto3.dynamodb.conditions import Key
def scan_movies(year_range, display_movies, dynamodb=None):
if not dynamodb:
dynamodb = boto3.resource('dynamodb', endpoint_url="http://localhost:8000")
table = dynamodb.Table('Movies')
scan_kwargs = {
'FilterExpression': Key('year').between(*year_range),
'ProjectionExpression': "#yr, title, info.rating",
'ExpressionAttributeNames': {"#yr": "year"}
}
done = False
start_key = None
while not done:
if start_key:
scan_kwargs['ExclusiveStartKey'] = start_key
response = table.scan(**scan_kwargs)
display_movies(response.get('Items', []))
start_key = response.get('LastEvaluatedKey', None)
done = start_key is None
if __name__ == '__main__':
def print_movies(movies):
for movie in movies:
print(f"\n{movie['year']} : {movie['title']}")
pprint(movie['info'])
query_range = (1950, 1959)
print(f"Scanning for movies released from {query_range[0]} to {query_range[1]}...")
scan_movies(query_range, print_movies)
728x90
'IT > 클라우드' 카테고리의 다른 글
[AWS] #1 웹 애블리케이션 개발 + Django - 환경설정 (0) | 2020.06.22 |
---|---|
[AWS] #5 SDK(python)로 DynamoDB 서비스 관리 (0) | 2020.06.18 |
[AWS] #3 SDK(python)로 DynamoDB 서비스 관리 (0) | 2020.06.18 |
[AWS] #2 SDK(python)로 DynamoDB 서비스 관리 (0) | 2020.06.18 |
[AWS] Amazon DynamoDB 서비스 사용(기본) (0) | 2020.06.16 |