DynamoDB Python 쿼리
- DynamoDB 소개
- Boto3 소개
- Boto3를 사용하여 DynamoDB에서 테이블 생성
- Boto3를 통해 DynamoDB에서 테이블 삭제
- Boto3를 통해 DynamoDB의 테이블 나열
- Boto3를 통한 DynamoDB의 페이지 매김
- Boto3를 통해 DynamoDB에서 정렬
- Boto3를 통해 DynamoDB에서 항목 가져오기
- Boto3를 통해 DynamoDB의 항목 스캔
- DynamoDB의 글로벌 보조 인덱스
- Boto3를 사용하여 DynamoDB 테이블 백업
- 결론
이 기사에서는 Python을 사용하여 Amazon DynamoDB를 쿼리하는 방법에 대해 설명합니다. 또한 Boto3의 내용과 DynamoDB를 쿼리해야 하는 이유에 대해서도 논의할 것입니다.
DynamoDB 소개
DynamoDB는 내장 보안 메커니즘, 연속 백업, 메모리 캐싱 및 유용한 데이터 가져오기/내보내기 도구를 제공하는 NoSQL 데이터베이스 서비스입니다.
DynamoDB는 AWS 리전의 여러 가용 영역(AZ) 간에 자동으로 데이터를 복제하여 중단 및 데이터 손실에 대한 보안을 강화합니다. 세분화된 액세스 제어, 미사용 암호화, 사용자 활동 기록을 포함하여 DynamoDB에서 다양한 보안 기능을 사용할 수 있습니다.
Boto3 소개
Boto3는 Amazon Web Services(AWS)용으로 개발된 내장 Python 라이브러리입니다. 이 라이브러리는 DynamoDB를 포함하여 Amazon의 다양한 서비스를 상호 작용, 생성, 구성, 관리 및 사용하는 데 유용합니다.
Boto3 설치 및 가져오기
Python 워크벤치에 Boto3 라이브러리를 설치하려면 다음 명령을 사용합니다.
pip install boto3
출력:
암호:
import boto3
이렇게 하면 boto3 라이브러리를 노트북으로 가져옵니다.
DynamoDB에 Boto3 연결
다음 코드를 사용하여 Boto3를 사용하여 DynamoDB에 연결합니다.
암호:
import boto3
client = boto3.client(
"dynamodb",
aws_access_key_id="yyyy",
aws_secret_access_key="xxxx",
region_name="us-east-1",
)
Python Boto3 라이브러리를 통해 연결하려면 데이터베이스가 AWS DynamoDB에 이미 생성되어 있어야 합니다.
Boto3를 사용하여 DynamoDB에서 테이블 생성
DynamoDB의 테이블은 여러 가지 방법으로 생성할 수 있습니다. 여기에는 Amazon CLI, AWS 콘솔 사용 또는 Boto3 사용이 포함됩니다.
여기에서는 앞에서 언급한 단계에 따라 이미 연결된 데이터베이스와 함께 Boto3를 사용합니다. DynamoDB 클라이언트와 테이블 리소스가 어떻게 다른지 알면 필요에 따라 둘 중 하나를 사용할 수 있습니다. 이 테이블 리소스는 일부 작업을 상당히 단순화할 수 있기 때문입니다.
개발자는 boto3.resource('dynamodb')
리소스를 사용하여 DynamoDB 테이블과 모든 콘텐츠를 생성, 업데이트 및 삭제할 수 있습니다. 이 리소스는 조건식 및 테이블 수준 보안을 사용하여 항목 수준 보안을 지원합니다.
DynamoDB 데이터에 대한 서버리스 액세스의 경우 AWS Lambda 함수와 함께 boto3.resource('dynamodb')
리소스를 활용하십시오.
import boto3
dynamodb = boto3.resource("dynamodb", region_name="us-west-2")
table = dynamodb.create_table(
TableName="Movies",
KeySchema=[
{"AttributeName": "year", "KeyType": "HASH"}, # Partition key
{"AttributeName": "title", "KeyType": "RANGE"}, # Sort key
],
AttributeDefinitions=[
{"AttributeName": "id", "AttributeType": "N"},
{"AttributeName": "createdAt", "AttributeType": "S"},
],
ProvisionedThroughput={"ReadCapacityUnits": 10, "WriteCapacityUnits": 10},
)
print("Table status:", table.table_status)
Boto3를 통한 테이블 생성이 활성화되고 표시되기까지 약간의 시간이 걸립니다. 재시도하기 전에 약간의 대기가 권장되거나 waiter
기능을 사용하여 테이블이 활성화될 때 알려줄 수 있습니다.
import botocore.session
session = botocore.session.get_session()
dynamodb = session.create_client(
"dynamodb", region_name="us-east-1"
) # low-level client
waiter = dynamodb.get_waiter("table_exists")
waiter.wait(TableName="my-table-name")
Boto3를 통해 DynamoDB에서 테이블 삭제
DynamoDB에서 테이블을 삭제하는 것은 매우 간단합니다. 마음이 바뀌어 데이터베이스에서 테이블을 삭제하려면 다음 코드 스니펫을 입력해야 합니다.
import boto3
dynamodb = boto3.resource("dynamodb", region_name="us-east-1")
dynamodb.delete_table(TableName="Movies")
삭제하려는 테이블이 동일한 이름의 데이터베이스에 이미 존재하거나 오류 메시지(테이블을 찾을 수 없음)가 표시됩니다.
Boto3를 통해 DynamoDB의 테이블 나열
우리 지역에서 사용 가능한 모든 테이블 목록을 찾는 데 관심이 있는 경우 list()
함수를 사용하여 지역에서 사용 가능한 모든 테이블을 나열해야 합니다.
import boto3
dynamodb = boto3.resource("dynamodb", region_name=region)
tables = list(dynamodb.tables.all())
print(tables)
총 테이블 수가 100개 미만인지 확인해야 합니다. 그렇지 않으면 목록을 통해 페이지를 매겨야 합니다.
Boto3를 통한 DynamoDB의 페이지 매김
단일 목록 호출은 최대 1MB의 항목에 대한 결과를 반환합니다. 추가 목록을 보려면 두 번째 전화를 걸어야 합니다. LastEvaluatedKey
가 응답 개체에 있는 경우 이 테이블에서 더 많은 항목을 가져오려면 ExclusiveStartKey
를 사용하여 또 다른 호출을 수행해야 합니다.
dynamodb = boto3.resource("dynamodb", region_name=region)
table = dynamodb.Table("my-table")
response = table.query()
data = response["Items"]
# LastEvaluatedKey indicates that there are more results
while "LastEvaluatedKey" in response:
response = table.query(ExclusiveStartKey=response["LastEvaluatedKey"])
data.update(response["Items"])
Boto3를 통해 DynamoDB에서 정렬
데이터베이스 측면에서 DynamoDB는 결과를 정렬하는 한 가지 방법만 제공합니다. 항목 정렬 기능은 테이블에 결과가 없는 경우 결과를 수신한 후 애플리케이션 코드에서 수행하는 것으로 제한됩니다.
그러나 다음 구문을 사용하여 내림차순 또는 오름차순 정렬 키를 사용하여 DynamoDB 결과를 정렬할 수 있습니다.
import boto3
dynamodb = boto3.resource("dynamodb", region_name=region)
table = dynamodb.Table("my-table")
# true = ascending, false = descending
response = table.query(ScanIndexForward=False)
data = response["Items"]
Boto3를 통해 DynamoDB에서 항목 가져오기
GetItem()
함수는 DynamoDB 데이터베이스에서 특정 항목을 가져오려는 경우에 사용됩니다.
import boto3
dynamodb = boto3.resource("dynamodb", region_name=region)
table = dynamodb.Table("my-table")
response = table.get_item(Key={primaryKeyName: "ID-1", sortKeyName: "SORT_2"})
Boto3를 통해 DynamoDB의 항목 스캔
테이블의 모든 정보는 스캔을 통해 액세스할 수 있습니다. 데이터는 테이블의 각 항목을 읽은 후 scan()
메서드에 의해 반환됩니다.
테이블 스캔 작업은 FilterExpression
과 같은 다른 선택 항목을 추가할 때 더 적은 수의 원하는 결과를 반환할 수 있습니다.
from boto3.dynamodb.conditions import Key, Attr
import boto3
dynamodb = boto3.resource("dynamodb")
table = dynamodb.Table("Employees")
response = table.scan()
response["Items"]
print(response)
# or
dynamodb = boto3.resource("dynamodb")
table = dynamodb.Table("Employees")
response = table.scan(FilterExpression=Attr("Department").eq("IT"))
print("The query returned the following items:")
for item in response["Items"]:
print(item)
DynamoDB의 글로벌 보조 인덱스
글로벌 보조 인덱스를 사용하여 기본 테이블의 기본 키에 포함되지 않은 속성을 쿼리할 수 있습니다. 이렇게 하면 전체 테이블 스캔 절차로 인한 지연과 비효율성을 피할 수 있습니다.
글로벌 보조 인덱스는 기본 테이블의 속성도 포함하지만 다른 기본 키를 사용하여 구조화되어 쿼리 속도가 빨라집니다.
Boto3를 사용하여 DynamoDB 테이블 백업
Boto3를 사용하여 DynamoDB 테이블에 대한 온디맨드 백업을 생성하려면 create_backup()
메서드를 활용하고 테이블 이름과 함께 대상 백업 테이블 이름을 전달합니다.
import boto3
client = boto3.client("dynamodb")
response = client.create_backup(TableName="Employees", BackupName="Employees-Backup-01")
print(response)
결론
이 기사에서는 Python Boto3를 사용하여 DynamoDB 테이블을 쿼리하고 Amazon DynamoDB에서 기타 CRUD 활동을 생성, 나열 및 수행하고 기타 유지 관리 작업을 수행하는 방법을 설명했습니다.
My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.
LinkedIn