Das Paket boto3
- Amazons offizieller AWS-API-Wrapper für Python - bietet großartige Unterstützung für das Hochladen von Elementen in DynamoDB. Es sieht wie folgt aus:Gibt es eine Python-API zum Senden von Batch-Get-Anforderungen an AWS DynamoDB?
db = boto3.resource("dynamodb", region_name = "my_region").Table("my_table")
with db.batch_writer() as batch:
for item in my_items:
batch.put_item(Item = item)
Hier my_items
eine Liste von Python-Dictionaries ist, von denen jede den Tisch des Primärschlüssel haben muss (s). Die Situation ist nicht perfekt - zum Beispiel gibt es keinen Sicherheitsmechanismus, der Sie daran hindert, Ihre Durchsatzgrenzen zu überschreiten - aber es ist immer noch ziemlich gut.
Es scheint jedoch kein Gegenstück zum Lesen aus der Datenbank zu geben. Der nächste, den ich finden kann, ist DynamoDB.Client.batch_get_item()
, aber hier ist die API extrem kompliziert. Hier ist, was Ihr Interesse an zwei Elementen wie folgt aussieht:
db_client = boto3.client("dynamodb", "my_region")
db_client.batch_get_item(
RequestItems = {
"my_table": {
"Keys": [
{"my_primary_key": {"S": "my_key1"}},
{"my_primary_key": {"S": "my_key2"}}
]
}
}
)
Diese erträglich sein könnte, aber die Antwort hat das gleiche Problem: alle Werte sind Wörterbücher, deren Schlüssel Datentypen ("S"
für string, "N"
für Nummer, "M"
zur Kartierung, etc.) und es ist mehr als ein bisschen nervig, alles parsen zu müssen. Also meine Fragen sind:
Gibt es einen nativen
boto3
Unterstützung für Batch von DynamoDB Lesen, ähnlich derbatch_writer
Funktion oben?
dass Failing,
Bietet
boto3
jede integrierte Möglichkeit, automatisch die Antworten auf dieDynamoDB.Client.batch_get_item()
Funktion deserialisieren?
Ich werde auch hinzufügen, dass die Funktion boto3.resource("dynamodb").Table().get_item()
hat, was würde ich als der „richtige“ API sein, dass kein Typen-Parsing für Ein- oder Ausgänge erforderlich ist. Es scheint also, dass dies eine Art Versäumnis seitens der Entwickler ist, und ich denke, ich suche nach einem Workaround.
das sieht gut aus! Ich denke, das wird die meisten Schmerzpunkte wegnehmen. Danke – mark