DynamoDB Script Memo (Python)

Über diesen Artikel

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.

Informationen zu Dynamo DB

Aufbau einer Python-Umgebung

Mit welcher Klasse soll ich Dynamo DB betreiben?

DynamoDB — Boto3 Docs documentation

Zunaechst...

So erstellen Sie eine Instanz in der Ressourcenklasse

Eindruck, dass Ressourcenklasse einfacher zu implementieren ist.

import boto3

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('name')

So erstellen Sie eine Instanz in der Client-Klasse

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.

Skript-Memo

―― Da es sich zum Zeitpunkt der persönlichen Überprüfung um ein Memo handelt, wie weit wird es für Ihre Referenz sein ...

Tabellendefinition / Inhalt

Allgemeiner Teilecode (unter Verwendung der Ressourcenklasse)

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}}

Artikelaktualisierung mit put_item

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}}

put_item_before_after.png

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

Anwendungsbeispiel ①

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'}]

Anwendungsbeispiel ②

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'}]

Wenn Sie einen GSI (Global Secondary Index) haben

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'}]

Wenn Sie nach einem anderen als dem Schlüssel filtern möchten

--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'}]

Ergänzende / empfohlene Seite

Recommended Posts

DynamoDB Script Memo (Python)
Python-Memo
Python-Memo
Python-Memo
Python-Memo
Python-Memo
Python-Memo
Python-Anfänger-Memo (9.2-10)
Python-Anfänger-Memo (9.1)
Python-Skript-Profilerstellung
Importieren Sie ein Python-Skript
★ Memo ★ Python Iroha
[Python] EDA-Memo
Python 3-Operator-Memo
[Mein Memo] Python
Python3-Metaklassen-Memo
[Python] Grundkarten-Memo
Bash-Skript-Memo
Python-Anfänger-Memo (2)
[Python] Numpy Memo
Python-Klasse (Python-Lernnotiz ⑦)
Python OpenCV Installation (Memo)
Python-Modul (Python-Lernnotiz ④)
Visualisierungsnotiz von Python
Python-Testpaket-Memo
[Python] Memo über Funktionen
Verwenden Sie DynamoDB mit Python
Memo zur Bisektionssuche (python2.7)
[Mein Memo] Python -v / Python -V
Python3-Memo vom Typ Liste / Wörterbuch
[Memo] Python 3-Listensortierung
Python-Tipps (mein Memo)
[Python] Memo Über Fehler
Python-Grundnotiz - Teil 2
Python-Rezeptbuch Memo
Grundlegende Python-Befehlsnotizen
Python OpenCV Tutorial Memo
Shell script @ study memo
Python grundlegende Grammatik Memo
TensorFlow API-Memo (Python)
Python nützliche Memo-Links
Python-Dekorator-Operationsnotiz
Python-Grundnotiz - Teil 1
Effektives Python-Memo Punkt 3
Ungefähre Aufzählung Python-Memo
Registrieren Sie DynamoDB x Python / Decimal
Behandlung von Python-Ausnahmen (Python-Lernnotiz ⑥)
Memo zur Messung der Python-Ausführungszeit
Twitter-Grafiknotiz mit Python
POST json mit Python 3-Skript
[Line / Python] Beacon-Implementierungsnotiz
Führen Sie das Illustrator-Skript von Python aus
Python und Ruby Slice Memo
Python-Grammatik-Grundnotiz (1)
Persönliches Python-Code-Memo
Unveränderlicher Python-Typ int memo
Python-Memo mit Perl --join
Python-Datentyp-Zusammenfassungsnotiz