Skip to main content
Documentation Status https://github.com/MacHu-GWU/pynamodb_session_manager-project/actions/workflows/main.yml/badge.svg https://codecov.io/gh/MacHu-GWU/pynamodb_session_manager-project/branch/main/graph/badge.svg https://img.shields.io/pypi/v/pynamodb-session-manager.svg https://img.shields.io/pypi/l/pynamodb-session-manager.svg https://img.shields.io/pypi/pyversions/pynamodb-session-manager.svg https://img.shields.io/badge/✍️_Release_History!--None.svg?style=social&logo=github https://img.shields.io/badge/⭐_Star_me_on_GitHub!--None.svg?style=social&logo=github
https://img.shields.io/badge/Link-API-blue.svg https://img.shields.io/badge/Link-Install-blue.svg https://img.shields.io/badge/Link-GitHub-blue.svg https://img.shields.io/badge/Link-Submit_Issue-blue.svg https://img.shields.io/badge/Link-Request_Feature-blue.svg https://img.shields.io/badge/Link-Download-blue.svg

Welcome to pynamodb_session_manager Documentation

https://pynamodb-session-manager.readthedocs.io/en/latest/_static/pynamodb_session_manager-logo.png

pynamodb_session_manager enables PynamoDB models to dynamically switch AWS credentials at runtime without modifying model definitions.

Problem Background

PynamoDB 6.0.0+ allows setting table-level connections by explicitly providing credentials, but this approach is not flexible or elegant for dynamic credential switching. Each PynamoDB model stores AWS session information in a _connection attribute. When you first use an ORM class to send a DynamoDB request, PynamoDB checks the model’s Meta class for AWS credentials. If none are found, it uses the default AWS profile and creates a connection stored in _connection, and then use it for all subsequent requests. This means that once a model’s connection is established, it cannot be changed without modifying the model’s definition or using a different model class.

As the author of boto-session-manager, an advanced boto3 session manager that can temporarily change the “Default AWS Profile” using context managers, I created this library to solve PynamoDB’s dynamic credential switching limitation.

How It Works

The use_boto_session context manager temporarily stores the current ORM class configuration, resets the _connection using the provided boto session manager, and conditionally reverts it back (depending on restore_on_exit parameter).

Quick Start

from pynamodb.models import Model
from pynamodb.attributes import UnicodeAttribute
from boto_session_manager import BotoSesManager

from pynamodb_session_manager import use_boto_session

# Define your PynamoDB model
class User(Model):
    class Meta:
        table_name = "users"
        region = "us-east-1"

    id = UnicodeAttribute(hash_key=True)

# Create session manager for different AWS account/profile
target_bsm = BotoSesManager(profile_name="target_profile")

# Use different credentials temporarily
with use_boto_session(User, target_bsm):
    # All operations here use target_profile credentials
    User.create_table(wait=True)
    user = User(id="123")
    user.save()

# Back to default credentials
# This will fail if table doesn't exist in default account
try:
    user = User.get("123")  # Uses default credentials
except Exception:
    print("Table not found in default account")

Advanced Usage

from pynamodb_session_manager import reset_connection

# Keep connection after context exits
with use_boto_session(User, target_bsm, restore_on_exit=False):
    user = User(id="456")
    user.save()

# Connection still uses target_profile
user = User.get("456")  # Still uses target_profile

# Manually reset to default credentials
reset_connection(User)
# Now uses default credentials again

Multiple Account Operations

default_bsm = BotoSesManager()  # Default profile
staging_bsm = BotoSesManager(profile_name="staging")
prod_bsm = BotoSesManager(profile_name="production")

# Create table in staging
with use_boto_session(User, staging_bsm):
    User.create_table(wait=True)

# Copy data from staging to production
with use_boto_session(User, staging_bsm):
    staging_users = list(User.scan())

with use_boto_session(User, prod_bsm):
    User.create_table(wait=True)
    for user in staging_users:
        user.save()

For comprehensive examples and advanced usage patterns, see the complete test suite.

Install

pynamodb_session_manager is released on PyPI, so all you need is to:

$ pip install pynamodb-session-manager

To upgrade to latest version:

$ pip install --upgrade pynamodb-session-manager

Metadata

Release files for pynamodb-session-manager 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pynamodb-session-manager 0.1.2
File Size Uploaded
pynamodb_session_manager-0.1.2.tar.gz 10.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pynamodb-session-manager 0.1.2
File Interpreter ABI Platform
pynamodb_session_manager-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 21.3 kB

Release files / pynamodb_session_manager-0.1.2.tar.gz

Download URL pynamodb_session_manager-0.1.2.tar.gz
Size 10.7 kB
Tags Source
SHA-256 checksum
How to use checksums
3435f1a7eadcd6479087a02108b758eea74e8d9d5b38310cd6b0831502e2e169
BLAKE2b-256 checksum
How to use checksums
7bddcb46abb3788efed32395bd111431c011987d22ca20760d7bb8e96e5b39cc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.8

Release files / pynamodb_session_manager-0.1.2-py3-none-any.whl

Download URL pynamodb_session_manager-0.1.2-py3-none-any.whl
Size 10.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
864b296d79216538c14652a04281ede99120dd8bb9506f55810abb6727acc009
BLAKE2b-256 checksum
How to use checksums
59326029da7d50e497efb0ab58989a30d7a53ed9f60287572c4af3d4be94a79d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.8

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page