Python 正确的Boto aws DynamoDb.scan语法
我使用Dynamo&Python已经有一段时间了,但是我遇到了语法不匹配的问题 我读到: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
# 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: