2017-01-01 3 views
0

Ich habe Probleme beim Definieren eines Abfrageausdrucks für AWS Dynamodb. Ziel ist es, den eindeutigen dynamodb-Datensatz zu erhalten, der das Feld timeStamp enthält, das die Zeichenfolge "1475413345" enthält. Ich habe bestätigt, dass ich dies über die AWS-Webkonsole mit derselben Zeichenfolge abrufen kann.AWS Boto3 Dynamodb-Abfrage Problem

Ich vermute, ich habe ein Problem mit der Syntax für .enthält falsche.

Jede Hilfe wird sehr geschätzt! Hier

ist der Code:

import boto3 
from boto3.dynamodb.conditions import Key, Attr 

from time import sleep 

benchtemp = boto3.resource('dynamodb') # if set in ~/.boto 
table = benchtemp.Table('benchtemp') 

temps = table.query(
    KeyConditionExpression=Key('timeStamp').contains('1475413345') 
) 


for temp in temps: 
    print temp; 
    time.sleep(1) 

Hier ist die Fehlermeldung erhalte ich:

Traceback (most recent call last): 
    File "/Users/neal/PycharmProjects/Read-NMT-DB/Read-NMT-DB.py", line 15, in <module> 
    KeyConditionExpression=Key('timeStamp').contains('1475413345') 
AttributeError: 'Key' object has no attribute 'contains' 

Process finished with exit code 1 
+0

Warum enthält statt eq? – jarmod

+0

Ich versuchte .eq und das gleiche Problem. Ich dachte, ich müsste .contains verwenden, da es eine Zeichenfolge ist. – Neal

+0

Dies ist der Befehl, den ich mit .eqKeyConditionExpression = Key ('primaryKey') versucht habe. Eq ('76fe48e3-88a0-11e6-9479-556298790684') – Neal

Antwort

1

KeyConditionExpressions darf nur die primäre (Partition und Art) beschränken Schlüssel der Tabelle/Index. Wenn timeStamp kein Primärschlüssel ist, können Sie einen Filterausdruck verwenden, um die Schlüssel herauszufiltern, die nicht mit dem Zeitstempelpräfix übereinstimmen, nach dem Sie suchen.

Verwandte Themen