我一直在使用Dynamo & Python一段时间,但我已经遇到了似乎在语法上不匹配。正确Boto aws DynamoDb .scan语法
我读:
# All results.
>>> everything = users.scan()
# Look for last names beginning with "D".
>>> results = users.scan(last_name__beginswith='D')
>>> for res in results:
... print res['first_name']
'Alice'
'John'
'Jane'
# Use an ``IN`` filter & limit.
>>> results = users.scan(
... age__in=[25, 26, 27, 28, 29],
... limit=1
...)
>>> for res in results:
... print res['first_name']
'Alice'
来源:http://boto.readthedocs.org/en/latest/ref/dynamodb2.html 这似乎与在博托表扫描功能同意:https://github.com/boto/boto/blob/433f211b5eb93560916a4bd4a1dbf905e6c13a58/boto/dynamodb2/table.py
的问题在于,当我尝试:
def getByAdvertiser(adv):
matchingTable=swfTable.scan(advertiser__eq=adv)
return getTableElements(matchingTable)
def getTableElements(table):
res=[]
for t in table:
res.append(t)
return res
根据上面的语法应该工作,因为swfTable是一个有效的表,.scan()返回元素,“advertiser”是一个发电机t “广告客户”中至少存在一个等于adv(“itunes.apple.com”)的元素。然而,我收到以下错误:
Traceback (most recent call last): File "/Users/tai/Documents/workspace/testSelenium/testS/init.py", line 101, in forInFile() File "/Users/tai/Documents/workspace/testSelenium/testS/init.py", line 95, in forInFile dynamoAccess.getByAdvertiser("itunes.apple.com") File "/Users/tai/Documents/workspace/testSelenium/testS/dynamoAccess.py", line 34, in getByAdvertiser matchingTable=swfTable.scan(advertiser__eq=adv) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/boto/dynamodb/table.py", line 518, in scan return self.layer2.scan(self, *args, **kw) TypeError: scan() got an unexpected keyword argument 'advertiser__eq'
我看不到我没有遵循文档的语法。
然而,当我看到其他的Boto dynamodb问题,他们使用的语法如:
results = self.table.scan(scan_filter={'asset': dynamodb.condition.EQ(asset)})
来自:
或者:
all_query = table.scan(attributes_to_get=['something'])
来源:boto python dynamodb scan attributes_to_get
这看起来不像我使用什么或我见过的任何记录。
编辑:
我认为这个问题可能是我一直在使用dynamodb1而不是2
aws_dynamo_table="decompiled_swf_text"
conn= S3Connection(aws_access_key_id,aws_secret_access_key);
dynamoConn = boto.connect_dynamodb(aws_access_key_id, aws_secret_access_key)
dTable = dynamoConn.get_table(aws_dynamo_table)
这会通过使用dynamodb2解决?如果是这样,我该怎么设置呢?我想:
dynamoConn = dynamodb2.layer1.DynamoDBConnection(region=RegionInfo(name=aws_dynamo_region,endpoint='dynamodb.us-east-1.amazonaws.com'),aws_access_key_id,aws_secret_access_key)
但是我不知道怎样才能再查询和扫描表......我没有看到一个可用的功能。