更正Boto aws DynamoDb.scan语法

2024-03-29 06:28:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用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'

发件人:http://boto.readthedocs.org/en/latest/ref/dynamodb2.html 这似乎与boto表中的扫描函数一致:https://github.com/boto/boto/blob/433f211b5eb93560916a4bd4a1dbf905e6c13a58/boto/dynamodb2/table.py

问题在于当我尝试:

^{pr2}$

在给定的表中,.fta()中至少有一个元素返回adviseritunes.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)})

发件人:

Trouble getting a dynamodb scan to work with boto

或者:

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)

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


Tags: keynameinpycomawsscanaccess
1条回答
网友
1楼 · 发布于 2024-03-29 06:28:26

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

和语法类似

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

new/high level API中定义。在

你一定要换到发电机2。从错误输出

^{pr2}$

似乎您使用的是DynamoDB而不是DynamoDB2,因为layer2 API是在dynamodbapi中定义的,而在DynamoDB2中则消失了。在

所以切换发电机2

1)get your table

2)使用表格扫描(年龄=25,26,27,28,29],极限=1)见here

相关问题 更多 >