DynamoDB启动本地版本和python-sdk使用示例

本文介绍如何启动本地DynamoDB实例并使用Python的boto3库进行基本的操作,包括创建表、读写数据、批量操作及查询等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安利一篇我翻译的国外大牛的神经网络入门文章

本地DynamoDB的启动方法

从http://dynamodb-local.s3-website-us-west-2.amazonaws.com/dynamodb_local_2016-05-17.tar.gz下载DynamoDB的按照包,本地jre环境的配置请自行配置

# tar zxf dynamodb_local_2016-05-17.tar.gz
# mkdir data
# java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb -dbPath data
Initializing DynamoDB Local with the following configuration:
Port:	8000
InMemory:	false
DbPath:	data
SharedDb:	true
shouldDelayTransientStatuses:	false
CorsParams:	*

Table 创建

# -*- coding:utf-8 -*-

import boto3
from boto3.dynamodb.conditions import Key, Attr

dynamodb = boto3.resource('dynamodb',
                          endpoint_url='http://localhost:8000')


def table_create():
    table = dynamodb.create_table(
        TableName='users',
        KeySchema=[
            {
                'AttributeName': 'username',
                'KeyType': 'HASH'
            },
            {
                'AttributeName': 'last_name',
                'KeyType': 'RANGE'
            }
        ],
        AttributeDefinitions=[
            {
                'AttributeName': 'username',
                'AttributeType': 'S'
            },
            {
                'AttributeName': 'last_name',
                'AttributeType': 'S'
            },

        ],
        ProvisionedThroughput={
            'ReadCapacityUnits': 5,
            'WriteCapacityUnits': 5
        }
    )
    table.meta.client.get_waiter('table_exists').wait(TableName='users')

获取Table

def table_get():
    return dynamodb.Table('users')

写入item

def item_put():
    table = table_get()
    table.put_item(
        Item={
                'username': 'liujinliu',
                'first_name': 'Jinliu',
                'last_name': 'liu',
                'age': 30,
                'account_type': 'standard_user',
            }
    )

获取item

def item_get():
    table = table_get()
    response = table.get_item(
        Key={
            'username': 'liujinliu',
            'last_name': 'liu',
        }
    )
    item = response['Item']
    return item

update item

def item_update():
    table = table_get()
    table.update_item(
        Key={
            'username': 'liujinliu',
            'last_name': 'liu'
        },
        UpdateExpression='SET age = :val1',
        ExpressionAttributeValues={
            ':val1': 26
        }
    )

删除item

def item_delete():
    table = table_get()
    table.delete_item(
        Key={
            'username': 'liujinliu',
            'last_name': 'liu'
        }
    )

获取表内item数量

def table_size():
    table = table_get()
    return table.item_count

批量更新/插入item

items = [
    {
        'username': 'liujinliu',
        'last_name': 'liu',
        'first_name': 'jinliu',
        'age': 25,
        'address': {
            'road': '1 Jefferson Street',
            'city': 'LA',
            'state': 'CA',
            'zipcode': '90001'
        }
    },
    {
        'username': 'wangyiyang',
        'last_name': 'wang',
        'first_name': 'yiyang',
        'age': 26,
        'address': {
            'road': 'huilongguan',
            'city': 'Beijing',
            'state': 'CHINA',
            'zipcode': '082'
        }
    },
    {
        'username': 'chenwenquan',
        'last_name': 'chen',
        'first_name': 'wenquan',
        'age': 27,
        'address': {
            'road': 'jintailu',
            'city': 'henan',
            'state': 'JP',
            'zipcode': '222'
        }
    },
    {
        'username': 'dengliangju',
        'last_name': 'deng',
        'first_name': 'liangju',
        'age': 28,
        'address': {
            'road': 'qingnianlu',
            'city': 'chengdu',
            'state': 'India',
            'zipcode': '333'
        }
    },
]


def batch_write():
    table = table_get()
    with table.batch_writer(overwrite_by_pkeys=['username',
                                                'last_name']) as batch:
        for item in items:
            batch.put_item(Item=item)

query, scan

def query():
    table = table_get()
    response = table.query(
        KeyConditionExpression=Key('username').eq('wangyiyang')
    )
    items = response['Items']
    return items


def scan():
    table = table_get()
    response = table.scan(
        FilterExpression=Attr('age').lt(28)
    )
    items = response['Items']
    return items


def scan_1():
    table = table_get()
    response = table.scan(
        FilterExpression=Attr('age').lt(28) & Attr(
            'address.city').begins_with('B')
    )
    items = response.get('Items', [])
    return items

删除Table

def table_delete():
    table = table_get()
    table.delete()

测试

if __name__ == '__main__':
    table_create()
    # item_put()
    # print(item_get())
    # item_update()
    # print(item_get())
    # print(table_size())
    # item_delete()
    print(table_size())
    batch_write()
    print(table_size())
    # print(item_get())
    print(query())
    print(scan())
    print(scan_1())
    # table_delete()
    # print(query())
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值