我们如何使用 boto3 查询 dynamodb 的二级索引?
How do we query on a secondary index of dynamodb using boto3?
有没有办法使用 boto3
查询 dynamodb 的 global secondary index
。我找不到任何在线教程或资源。
您需要为 query
函数提供一个 IndexName
参数。
这是索引的名称,通常与索引的名称不同attribute(索引的名称默认有一个 -index
后缀,尽管您可以在 table 创建期间更改它)。例如,如果您的索引属性称为 video_id
,则您的索引名称可能是 video_id-index
.
import boto3
from boto3.dynamodb.conditions import Key
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('videos')
video_id = 25
response = table.query(
IndexName='video_id-index',
KeyConditionExpression=Key('video_id').eq(video_id)
)
要查看 索引名称,请转到 AWS 网络界面上 table 的 Indexes
选项卡。您需要 Name
列中的值。
对于使用 boto3 客户端的任何人,下面的示例应该有效:
import boto3
# for production
client = boto3.client('dynamodb')
# for local development if running local dynamodb server
client = boto3.client(
'dynamodb',
region_name='localhost',
endpoint_url='http://localhost:8000'
)
resp = client.query(
TableName='UsersTabe',
IndexName='MySecondaryIndexName',
ExpressionAttributeValues={
':v1': {
'S': 'some@email.com',
},
},
KeyConditionExpression='emailField = :v1',
)
# will always return list
items = resp.get('Items')
first_item = items[0]
添加更新技术:
import boto3
from boto3.dynamodb.conditions import Key, Attr
dynamodb = boto3.resource(
'dynamodb',
region_name='localhost',
endpoint_url='http://localhost:8000'
)
table = dynamodb.Table('userTable')
attributes = table.query(
IndexName='UserName',
KeyConditionExpression=Key('username').eq('jdoe')
)
if 'Items' in attributes and len(attributes['Items']) == 1:
attributes = attributes['Items'][0]
这样的问题很多,因为通过boto3调用dynamo并不直观。我使用 dynamof
库使此类事情变得更加常识化。使用 dynamof
调用如下所示。
from dynamof.operations import query
from dynamof.conditions import attr
query(
table_name='users',
conditions=attr('role').equals('admin'),
index_name='role_lookup_index')
https://github.com/rayepps/dynamof
免责声明:我写了 dynamof
有没有办法使用 boto3
查询 dynamodb 的 global secondary index
。我找不到任何在线教程或资源。
您需要为 query
函数提供一个 IndexName
参数。
这是索引的名称,通常与索引的名称不同attribute(索引的名称默认有一个 -index
后缀,尽管您可以在 table 创建期间更改它)。例如,如果您的索引属性称为 video_id
,则您的索引名称可能是 video_id-index
.
import boto3
from boto3.dynamodb.conditions import Key
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('videos')
video_id = 25
response = table.query(
IndexName='video_id-index',
KeyConditionExpression=Key('video_id').eq(video_id)
)
要查看 索引名称,请转到 AWS 网络界面上 table 的 Indexes
选项卡。您需要 Name
列中的值。
对于使用 boto3 客户端的任何人,下面的示例应该有效:
import boto3
# for production
client = boto3.client('dynamodb')
# for local development if running local dynamodb server
client = boto3.client(
'dynamodb',
region_name='localhost',
endpoint_url='http://localhost:8000'
)
resp = client.query(
TableName='UsersTabe',
IndexName='MySecondaryIndexName',
ExpressionAttributeValues={
':v1': {
'S': 'some@email.com',
},
},
KeyConditionExpression='emailField = :v1',
)
# will always return list
items = resp.get('Items')
first_item = items[0]
添加更新技术:
import boto3
from boto3.dynamodb.conditions import Key, Attr
dynamodb = boto3.resource(
'dynamodb',
region_name='localhost',
endpoint_url='http://localhost:8000'
)
table = dynamodb.Table('userTable')
attributes = table.query(
IndexName='UserName',
KeyConditionExpression=Key('username').eq('jdoe')
)
if 'Items' in attributes and len(attributes['Items']) == 1:
attributes = attributes['Items'][0]
这样的问题很多,因为通过boto3调用dynamo并不直观。我使用 dynamof
库使此类事情变得更加常识化。使用 dynamof
调用如下所示。
from dynamof.operations import query
from dynamof.conditions import attr
query(
table_name='users',
conditions=attr('role').equals('admin'),
index_name='role_lookup_index')
https://github.com/rayepps/dynamof
免责声明:我写了 dynamof