Wie überprüft man, ob die DynamoDB-Tabelle existiert?

10

Ich bin ein neuer Benutzer in boto3 und verwende DynamoDB .

Ich ging über die DynamoDB API und ich konnte keine Methode finden, die mir sagt, ob eine Tabelle bereits existiert.

Was ist der beste Ansatz, um dieses Problem zu lösen?

Sollte ich versuchen, eine neue Tabelle zu erstellen und sie mit try catch zu umbrechen?

    
roeygol 27.02.2017, 12:16
quelle

4 Antworten

14

Nach dem Lesen der Dokumentation kann ich sehen, dass es drei Methoden gibt, mit denen Sie überprüfen können, ob eine Tabelle existiert.

  1. Die CreateTable-API gibt den Fehler ResourceInUseException aus, wenn die Tabelle bereits existiert. Umbrechen Sie die create_table-Methode mit try, außer um das
  2. zu fangen
  3. Sie können die ListTables-API verwenden, um die Liste der Tabellennamen, die dem aktuellen Konto und dem Endpunkt zugeordnet sind. Überprüfen Sie, ob der Tabellenname in der Liste der Tabellennamen vorhanden ist, die Sie in der Antwort erhalten haben.
  4. Die DescribeTable-API gibt einen Fehler ResourceNotFoundException aus, wenn der Tabellenname Sie lautet Anfrage existiert nicht.

Für mich klingt die erste Option besser, wenn Sie nur eine Tabelle erstellen möchten.

Bearbeiten: Ich sehe, dass manche Leute Schwierigkeiten haben, die Ausnahmen zu erfassen. Ich werde unten einen Code schreiben, damit Sie wissen, wie Sie mit Ausnahmen in boto3 umgehen können.

Beispiel 1

%Vor%

Beispiel 2

%Vor%

Beispiel 3

%Vor%     
anupsabraham 27.02.2017, 13:04
quelle
7
%Vor%     
anon58192932 05.06.2017 15:42
quelle
3

Sie können die API describe table verwenden, um festzustellen, ob die Tabelle vorhanden ist.

Beispielcode:

%Vor%

Wenn die Tabelle existiert: -

  • Sie erhalten die Antwort

Wenn die Tabelle nicht existiert: -

  • Sie erhalten ResourceNotFoundException

    botocore.errorfactory.ResourceNotFoundException: Ein Fehler ist aufgetreten (ResourceNotF oundException) beim Aufrufen der DescribeTable-Operation: Operationen können nicht ausgeführt werden  eine nicht vorhandene Tabelle

Eine andere Möglichkeit: -

  

Wartet bis diese Tabelle existiert. Diese Methode ruft auf   DynamoDB.Waiter.table_exists.wait () fragt ab.   DynamoDB.Client.describe_table () alle 20 Sekunden bis ein erfolgreicher   Status ist erreicht. Nach 25 fehlgeschlagenen Überprüfungen wird ein Fehler zurückgegeben.

%Vor%     
notionquest 27.02.2017 13:03
quelle
2

Sie können .table_status bei jedem boto3 verwenden Tabelleninstanzobjekt Er gibt seinen Status zurück, wenn er existiert (ERSTELLEN, AKTUALISIEREN, LÖSCHEN, AKTIV) oder gibt die Ausnahme botocore.exceptions.ClientError: Requested resource not found: Table: <YOUR_TABLE_NAME> not found aus. Sie können diese Bedingungen in try / except umwandeln, um vollständige Informationen über den aktuellen Tabellenstatus zu erhalten.

%Vor%     
juggernaut 08.11.2017 11:29
quelle

Tags und Links