Neulich habe ich Code geschrieben, um Dynamo DB unter AWS mit Python zu betreiben. Zur Erinnerung werde ich das damalige Basisskript und die Idee zusammenfassen, die Dynamo DB eigen ist. Es ist nicht erschöpfend, aber ich werde das Minimum plus Alpha erwähnen. Ich hoffe es hilft Fremden.
DynamoDB — Boto3 Docs documentation
Eindruck, dass Ressourcenklasse einfacher zu implementieren ist.
import boto3
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('name')
Die Client-Klasse deckt die meisten APIs für jeden Dienst ab und ist "grundlegend". Eindruck
import boto3
client = boto3.client('dynamodb')
#Der Tabellenname wird beim Betrieb der Tabelle angegeben.
―― Da es sich zum Zeitpunkt der persönlichen Überprüfung um ein Memo handelt, wie weit wird es für Ihre Referenz sein ...
Enthält Stationsinformationen (Präfektur- und Koordinateninformationen).
Setzen Sie die Präfektur als Partitionsschlüssel und die ID als Sortierschlüssel als Primärschlüssel.
Der Primärschlüssel (Hinweis: Partitionsschlüssel und Sortierschlüssel) und die Attribute sind alle Zeichentypen.
"Hinweis! 》 In diesem Artikel werden japanische Zeichenfolgen für den Partitionsschlüssel verwendet. Dies dient jedoch nur der Erläuterung. ――Ich denke, es ist üblich, alphanumerische Zeichenfolgen und Zahlenzeichenfolgen zu verwenden.
import boto3
from boto3.dynamodb.conditions import Key, Attr
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('table_name')
put_item
response = table.put_item(
Item = {
'prefecture':'Iwate',
'id':'5',
'stationName':'Morioka'
}
)
print(response)
# {'ResponseMetadata': {'RequestId': 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNO', 'HTTPStatusCode': 200, 'HTTPHeaders': {'server': 'Server', 'date': 'Mon, 28 Sep 2020 14:24:47 GMT', 'content-type': 'application/x-amz-json-1.0', 'content-length': '2', 'connection': 'keep-alive', 'x-amzn-requestid': 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNO', 'x-amz-crc32': '2745614147'}, 'RetryAttempts': 0}}
response = table.put_item(
Item = {
'prefecture':'Hokkaido',
'id':'13',
'stationName':'Himekawa (aktualisiert)',
'hoge': 'fuga'
}
)
print(response)
# {'ResponseMetadata': {'RequestId': 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNO', 'HTTPStatusCode': 200, 'HTTPHeaders': {'server': 'Server', 'date': 'Mon, 28 Sep 2020 15:02:47 GMT', 'content-type': 'application/x-amz-json-1.0', 'content-length': '2', 'connection': 'keep-alive', 'x-amzn-requestid': 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNO', 'x-amz-crc32': '2745614147'}, 'RetryAttempts': 0}}
get_item
response = table.get_item(
Key={
'prefecture':'Hokkaido',
'id':'1'
}
)
print(response['Item'])
# {'stationName': 'Hakodate', 'prefecture': 'Hokkaido', 'id': '1', 'latitude': '41.773709', 'stationId': '1110101', 'longitude': '140.726413'}
query
Selbst wenn sowohl der Partitionsschlüssel als auch der Sortierschlüssel als Grenzschlüssel festgelegt sind, kann die Abfragemethode verwendet werden, um nur mit dem Partitionsschlüssel zu suchen.
response = table.query(
KeyConditionExpression = Key('prefecture').eq('Hokkaido')
)
print(response['Items'])
# [{'stationName': 'Hakodate', 'prefecture': 'Hokkaido', 'id': '1', 'latitude': '41.773709', 'stationId': '1110101', 'longitude': '140.726413'}, {'stationName': 'Akai Fluss', 'prefecture': 'Hokkaido', 'id': '10', 'latitude': '42.003267', 'stationId': '1110110', 'longitude': '140.642678'}, {'stationName': 'Komagatake', 'prefecture': 'Hokkaido', 'id': '11', 'latitude': '42.038809', 'stationId': '1110111', 'longitude': '140.610476'}, {'stationName': 'Higashiyama', 'prefecture': 'Hokkaido', 'id': '12', 'latitude': '42.06172', 'stationId': '1110112', 'longitude': '140.605222'}]
response = table.query(
KeyConditionExpression = Key('prefecture').eq('Hokkaido')&Key('id').begins_with('1'),
ScanIndexForward = False,
Limit = 2,
)
print(response['Items'])
# [{'stationName': 'Choshiguchi', 'prefecture': 'Hokkaido', 'id': '16', 'latitude': '42.015471', 'stationId': '1110116', 'longitude': '140.720656'}, {'stationName': 'Ryuyama Onsen', 'prefecture': 'Hokkaido', 'id': '15', 'latitude': '42.003483', 'stationId': '1110115', 'longitude': '140.716358'}]
Mit --GSI (Global Secondary Index) können Sie zusätzlich zum Tabellenpartitionsschlüssel / Sortierschlüssel einen neuen Partitionsschlüssel / Sortierschlüssel festlegen.
query
response = table.query(
IndexName = 'stationName-stationId-index',
KeyConditionExpression = Key('stationName').eq('Ryuyama Onsen'),
)
print(response['Items'])
# [{'stationName': 'Ryuyama Onsen', 'prefecture': 'Hokkaido', 'id': '15', 'latitude': '42.003483', 'longitude': '140.716358', 'stationId': '1110115'}]
--Verwenden Sie den Parameter FilterExpression
response = table.query(
KeyConditionExpression = Key('prefecture').eq('Hokkaido'),
FilterExpression = Attr('stationId').begins_with('1110114'),
ScanIndexForward = False
)
print(response['Items'])
# [{'stationName': 'Ikedaen', 'prefecture': 'Hokkaido', 'id': '14', 'latitude': '41.990692', 'stationId': '1110114', 'longitude': '140.700333'}]
Recommended Posts