Python 正确的Boto aws DynamoDb.scan语法

Python 正确的Boto aws DynamoDb.scan语法,python,python-2.7,amazon-web-services,boto,amazon-dynamodb,Python,Python 2.7,Amazon Web Services,Boto,Amazon Dynamodb,我使用Dynamo&Python已经有一段时间了,但是我遇到了语法不匹配的问题 我读到: # All results. >>> everything = users.scan() # Look for last names beginning with "D". >>> results = users.scan(last_name__beginswith='D') >>> for res in results: ... print

我使用Dynamo&Python已经有一段时间了,但是我遇到了语法不匹配的问题

我读到:

# 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'
发件人: 这似乎与boto表中的扫描功能一致:

问题在于,当我尝试时:

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”是一个dynamo表列,“advertiser”中至少有一个元素等于adv(“itunes.apple.com”)。但是,我得到以下错误:

回溯(最近一次调用上次):文件 “/Users/tai/Documents/workspace/testSelenium/testS/init.py”,第行 101,在 forinflee()文件“/Users/tai/Documents/workspace/testSelenium/testS/init.py”,第行 95,在福林里 dynamoAccess.getByAdvertiser(“itunes.apple.com”)文件“/Users/tai/Documents/workspace/testSelenium/testS/dynamoAccess.py”, 第34行,在getByAdvertiser中 matchingTable=swfTable.scan(广告商__eq=adv)文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/boto/dynamodb/table.py”, 第518行,扫描中 return self.layer2.scan(self,*args,**kw)TypeError:scan()得到一个意外的关键字参数“advertiser\uuuu eq”

我不明白我是如何不遵循文档的语法的

但是,当我看其他Boto dynamodb问题时,他们使用的语法如下:

results = self.table.scan(scan_filter={'asset': dynamodb.condition.EQ(asset)})
发件人:

或:

发件人:

这看起来和我正在使用的或者我见过的任何东西都不一样

编辑:

我相信问题可能是我一直在使用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)

但是我不知道如何查询和扫描表。。。我没有看到可用的函数

您发现的两个示例都在使用。例如,在旧的API中,函数将使用scanFilter作为参数

和语法一样

>>> results = users.scan(
...     age__in=[25, 26, 27, 28, 29],
...     limit=1
... )
在中定义

你绝对应该切换到DynamoDB2。从错误输出中

in scan return self.layer2.scan(self, *args, **kw) TypeError:
看起来您使用的是DynamoDB而不是DynamoDB2,因为它在DynamoDB api中定义,在DynamoDB2中消失了

所以,切换boto DynamoDB2

(一)

2) 使用table.scan(年龄=25,26,27,28,29],极限=1)参见

in scan return self.layer2.scan(self, *args, **kw) TypeError: