Fragen Sie DynamoDB Python ab

Abid Ullah 15 Februar 2024
  1. Einführung in DynamoDB
  2. Einführung in Boto3
  3. Tabelle in DynamoDB mit Boto3 erstellen
  4. Löschen Sie Tabellen in DynamoDB über Boto3
  5. Listen Sie Tabellen in DynamoDB über Boto3 auf
  6. Paginierung in DynamoDB über Boto3
  7. Sortieren in DynamoDB über Boto3
  8. Holen Sie sich Elemente in DynamoDB über Boto3
  9. Scannen Sie Elemente in DynamoDB über Boto3
  10. Globaler Sekundärindex in DynamoDB
  11. Sichern Sie eine DynamoDB-Tabelle mit Boto3
  12. Abschluss
Fragen Sie DynamoDB Python ab

In diesem Artikel wird erläutert, wie wir Amazon DynamoDB mit Python abfragen können. Wir werden auch besprechen, worum es bei Boto3 geht und warum es DynamoDB abfragen muss.

Einführung in DynamoDB

DynamoDB ist ein NoSQL-Datenbankdienst, der integrierte Sicherheitsmechanismen, kontinuierliche Sicherung, Speicher-Caching und nützliche Tools zum Importieren/Exportieren von Daten bietet.

DynamoDB repliziert Daten automatisch über verschiedene Availability Zones (AZs) in einer AWS-Region und erhöht so die Sicherheit gegen Ausfälle und Datenverlust. Zahlreiche Sicherheitsfunktionen sind mit DynamoDB verfügbar, darunter feinkörnige Zugriffskontrolle, Verschlüsselung im Ruhezustand und Aufzeichnung von Benutzeraktivitäten.

Einführung in Boto3

Boto3 ist eine integrierte Python-Bibliothek, die für Amazon Web Services (AWS) entwickelt wurde. Diese Bibliothek ist nützlich für die Interaktion, Erstellung, Konfiguration, Verwaltung und Nutzung verschiedener Dienste von Amazon, einschließlich DynamoDB.

Installieren und importieren Sie Boto3

Verwenden Sie den folgenden Befehl, um die Boto3-Bibliothek in unserer Python-Workbench zu installieren.

pip install boto3

Ausgang:

Boto3 installieren

Code:

import boto3

Dies soll die boto3-Bibliothek in unser Notebook importieren.

Verbinden von Boto3 mit DynamoDB

Wir verwenden den folgenden Code, um mit Boto3 eine Verbindung zu unserer DynamoDB herzustellen.

Code:

import boto3

client = boto3.client(
    "dynamodb",
    aws_access_key_id="yyyy",
    aws_secret_access_key="xxxx",
    region_name="us-east-1",
)

Beachten Sie, dass die Datenbank bereits auf AWS DynamoDB erstellt werden muss, um über die Python-Boto3-Bibliothek eine Verbindung zu ihr herzustellen.

Tabelle in DynamoDB mit Boto3 erstellen

Tabellen in DynamoDB können auf mehrere Arten erstellt werden. Dazu gehört die Verwendung von Amazon CLI, AWS Console oder die Verwendung von Boto3.

Hier verwenden wir Boto3 mit der Datenbank, mit der wir bereits verbunden sind, indem wir die zuvor genannten Schritte ausführen. Wenn Sie wissen, wie sich der DynamoDB-Client und die Tabellenressource unterscheiden, können Sie je nach Ihren Anforderungen beide verwenden, da diese Tabellenressource einige Vorgänge erheblich vereinfachen kann.

Entwickler können DynamoDB-Tabellen und alle Inhalte mit der Ressource boto3.resource('dynamodb') erstellen, aktualisieren und löschen. Diese Ressource unterstützt Sicherheit auf Elementebene mit bedingten Ausdrücken und Sicherheit auf Tabellenebene.

Verwenden Sie für den serverlosen Zugriff auf DynamoDB-Daten die Ressource boto3.resource('dynamodb') in Verbindung mit AWS Lambda-Funktionen.

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)

Die Tabellenerstellung über Boto3 dauert einige Zeit, bevor es aktiv ist und angezeigt wird. Es wird empfohlen, ein wenig zu warten, bevor Sie es erneut versuchen, oder wir können eine waiter-Funktion verwenden, um uns mitzuteilen, wann der Tisch aktiv ist.

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")

Löschen Sie Tabellen in DynamoDB über Boto3

Das Löschen von Tabellen in DynamoDB ist ganz einfach. Wir müssen das folgende Code-Snippet eingeben, wenn wir unsere Meinung ändern und eine Tabelle aus unserer Datenbank löschen möchten.

import boto3

dynamodb = boto3.resource("dynamodb", region_name="us-east-1")

dynamodb.delete_table(TableName="Movies")

Denken Sie daran, dass die Tabelle, die wir zu löschen versuchen, bereits mit demselben Namen in der Datenbank vorhanden ist oder uns eine Fehlermeldung ausgibt (Tabelle nicht gefunden).

Listen Sie Tabellen in DynamoDB über Boto3 auf

Wenn wir daran interessiert sind, die Liste aller in unserer Region verfügbaren Tische zu finden, müssen wir die Funktion list() verwenden, um alle verfügbaren Tische in der Region aufzulisten.

import boto3

dynamodb = boto3.resource("dynamodb", region_name=region)

tables = list(dynamodb.tables.all())
print(tables)

Es muss darauf geachtet werden, dass die Gesamtzahl der Tabellen weniger als 100 beträgt, sonst müssen wir die Liste paginieren.

Paginierung in DynamoDB über Boto3

Ein einzelner Listenaufruf gibt Ergebnisse bis zu 1 MB an Elementen zurück. Für eine weitere Auflistung müssen wir einen zweiten Anruf tätigen. Ein weiterer Aufruf mit ExclusiveStartKey sollte erfolgen, um mehr Items aus dieser Tabelle zu bekommen, wenn LastEvaluatedKey im Response-Objekt vorhanden war.

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"])

Sortieren in DynamoDB über Boto3

Auf der Datenbankseite bietet DynamoDB nur eine Methode zum Sortieren der Ergebnisse. Ihre Möglichkeit, Elemente zu sortieren, ist darauf beschränkt, dies im Anwendungscode zu tun, nachdem Sie die Ergebnisse erhalten haben, falls Ihre Tabelle keine enthält.

Sie können jedoch die folgende Syntax verwenden, um DynamoDB-Ergebnisse mit dem Sortierschlüssel entweder in absteigender oder aufsteigender Reihenfolge zu sortieren.

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"]

Holen Sie sich Elemente in DynamoDB über Boto3

Die Funktion GetItem() wird verwendet, wenn wir daran interessiert sind, ein bestimmtes Element aus unserer DynamoDB-Datenbank zu erhalten.

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

Scannen Sie Elemente in DynamoDB über Boto3

Auf alle Informationen in Tabellen kann durch Scannen zugegriffen werden. Die Daten werden nach dem Lesen jedes Elements in der Tabelle von der Methode scan() zurückgegeben.

Der Tabellen-Scan-Vorgang kann weniger und die gewünschten Ergebnisse zurückgeben, wenn Sie andere Auswahlmöglichkeiten wie FilterExpression hinzufügen.

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)

Globaler Sekundärindex in DynamoDB

Sie können Eigenschaften abfragen, die nicht im Primärschlüssel der Haupttabelle enthalten sind, indem Sie einen globalen Sekundärindex verwenden. Dadurch können Verzögerungen und Ineffizienzen vermieden werden, die durch eine vollständige Tabellenscanprozedur verursacht werden.

Der globale Sekundärindex enthält auch Eigenschaften aus der Primärtabelle, wird jedoch mit einem anderen Primärschlüssel strukturiert, wodurch Abfragen schneller werden.

Sichern Sie eine DynamoDB-Tabelle mit Boto3

Um On-Demand-Backups für die DynamoDB-Tabelle mit Boto3 zu erstellen, verwenden Sie die Methode create_backup() und übergeben Sie den Namen der Ziel-Backup-Tabelle zusammen mit dem Tabellennamen.

import boto3

client = boto3.client("dynamodb")

response = client.create_backup(TableName="Employees", BackupName="Employees-Backup-01")
print(response)

Abschluss

In diesem Artikel wurde erläutert, wie Sie DynamoDB-Tabellen abfragen, andere CRUD-Aktivitäten auf Amazon DynamoDB mit Python Boto3 erstellen, auflisten und ausführen und andere Wartungsaufgaben durchführen.

Autor: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

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