Il pacchetto boto3
- Il wrapper API AWS ufficiale di Amazon per python - ha un ottimo supporto per il caricamento di elementi su DynamoDB alla rinfusa. Ecco come si presenta:Esiste un'API Python per l'invio di richieste di acquisizione batch ad 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)
Qui my_items
è una lista di dizionari Python ognuno dei quali deve avere la chiave primaria della tabella (s). La situazione non è perfetta - ad esempio, non esiste un meccanismo di sicurezza che ti impedisca di superare i tuoi limiti di rendimento - ma è comunque abbastanza buono.
Tuttavia, non sembra esserci alcuna controparte per la lettura dal database. Il più vicino che riesco a trovare è DynamoDB.Client.batch_get_item()
, ma qui l'API è estremamente complicata. Ecco cosa si richiede due elementi sembra:
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"}}
]
}
}
)
Questo potrebbe essere tollerabile, ma la risposta ha lo stesso problema: tutti i valori sono dizionari le cui chiavi sono i tipi di dati ("S"
per le stringhe, "N"
per il numero, "M"
per la mappatura, ecc.) ed è più che un po 'fastidioso dover analizzare tutto. Quindi le mie domande sono:
C'è
boto3
supporto nativo per lotti la lettura da DynamoDB, simile alla funzionebatch_writer
di cui sopra?
In mancanza di questo,
Vuol
boto3
forniscono alcun modo incorporato per deserializzare automaticamente le risposte alla funzione diDynamoDB.Client.batch_get_item()
?
te lo anche aggiungere che la funzione boto3.resource("dynamodb").Table().get_item()
trovi quello che io considero l'API "corretta", in quanto nessun tipo di analisi è necessaria per ingressi o uscite. Quindi sembra che questa sia una sorta di supervisione da parte degli sviluppatori, e suppongo che stia cercando una soluzione alternativa.
questo sembra buono! Penso che questo tolga molti punti dolenti. grazie – mark