Skip to main content

DynamoDB Single Table Library

Project description

Dokklib-DB

CI Join the chat at https://gitter.im/dokklib/dokklib-db

Dokklib-DB is a Python library for the DynamoDB single table pattern.

Features

  • Simple, Pythonic query interface on top of Boto3. No more nested dict literals!
  • Type safety for primary keys and indices (for documentation and data integrity).
  • Easy error handling.
  • Full type hint & unit test coverage + integration testing.

Documentation

Install

Install with:

pip install "boto3>=1.10.34,<2" dokklib-db

Requires Python 3.6 or later.

Note that Boto3 is not specified as an installation requirement for Dokklib-DB, so you have to install it separately (like in the example command above). The reason for this is to make Dokklib-DB easier to use in AWS Lambda where Boto3 is part of the default environment. The earliest supported Boto3 version is 1.10.34 which is the same version as the Boto3 package in the Python 3 AWS Lambda environments.

Example usage

import dokklib_db_extended as db


class User(db.EntityName):
    """User entity name.

    Key value: unique user name, eg. 'alice'.
    Example key: 'USER#alice'.

    """


class Group(db.EntityName):
    """Group entity name.

    Key value: unique group name, eg. 'my-group'.
    Example key: 'GROUP#my-group'.

    """


table = db.Table('SingleTable')

# Construct entity keys.
pk_alice = db.PartitionKey(User, 'alice')
pk_bob = db.PartitionKey(User, 'bob')
sk_group1 = db.SortKey(Group, 'group1')

# Add users to group one.
# Insert is a `PutItem` operation that fails if the item already exists.
table.insert(pk_alice, sk_group1)
table.insert(pk_bob, sk_group1)

# Get all users in group one.
pk_group = db.PartitionKey(Group, 'group1')
user_prefix = db.PrefixSortKey(User)
group_members = table.query_prefix(pk_group, user_prefix, 
    global_index=db.InversePrimaryIndex())

print(group_members)
# [{'PK': 'alice'}, {'PK': 'bob'}]

# Move users from group one to group two atomically.
sk_group2 = db.SortKey(Group, 'group2')
table.transact_write_items([
    db.DeleteArg(pk_alice, sk_group1),
    db.DeleteArg(pk_bob, sk_group1),
    db.InsertArg(pk_alice, sk_group2),
    db.InsertArg(pk_bob, sk_group2)
])

Status

The library is in beta and under heavy development as I'm working on it while building a serverless project that relies on it. I have only implemented parts of the DynamoDB API that I needed so far, but I'm planning on achieving full coverage. Feature and pull requests are welcome. (Please open an issue, before starting work on a pull request to avoid wasted effort.)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dokklib_db_extended-0.1.8.tar.gz (41.5 kB view details)

Uploaded Source

File details

Details for the file dokklib_db_extended-0.1.8.tar.gz.

File metadata

  • Download URL: dokklib_db_extended-0.1.8.tar.gz
  • Upload date:
  • Size: 41.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for dokklib_db_extended-0.1.8.tar.gz
Algorithm Hash digest
SHA256 56e10c57b9a8b95c2f86382ae77c2eb5a1519d06f4683d248d3e37e9b870a501
MD5 f5053209b577fa8374c2700b301f21b1
BLAKE2b-256 903cf7897617ef69ab59e4dc92c30ad1cfa10b4c390785ed9ec92b207d388d55

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page