pynamodb


Namepynamodb JSON
Version 6.0.0 PyPI version JSON
download
home_pagehttp://jlafon.io/pynamodb.html
SummaryA Pythonic Interface to DynamoDB
upload_time2024-01-14 15:41:39
maintainer
docs_urlNone
authorJharrod LaFon
requires_python>=3.7
licenseMIT
keywords python dynamodb amazon
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage
            ========
PynamoDB
========

.. image:: https://img.shields.io/pypi/v/pynamodb.svg
    :target: https://pypi.python.org/pypi/pynamodb/
.. image:: https://img.shields.io/conda/vn/conda-forge/pynamodb.svg
    :target: https://anaconda.org/conda-forge/pynamodb
.. image:: https://github.com/pynamodb/PynamoDB/workflows/Tests/badge.svg
    :target: https://github.com/pynamodb/PynamoDB/actions
.. image:: https://img.shields.io/coveralls/pynamodb/PynamoDB/master.svg
    :target: https://coveralls.io/github/pynamodb/PynamoDB

A Pythonic interface for Amazon's `DynamoDB <https://aws.amazon.com/dynamodb/>`_.

DynamoDB is a great NoSQL service provided by Amazon, but the API is verbose.
PynamoDB presents you with a simple, elegant API.

Useful links:

* See the full documentation at https://pynamodb.readthedocs.io/
* Ask questions in the `GitHub issues <https://github.com/pynamodb/PynamoDB/issues>`_
* See release notes at https://pynamodb.readthedocs.io/en/latest/release_notes.html

Installation
============
From PyPi::

    $ pip install pynamodb

From GitHub::

    $ pip install git+https://github.com/pynamodb/PynamoDB#egg=pynamodb

From conda-forge::

    $ conda install -c conda-forge pynamodb


Basic Usage
===========

Create a model that describes your DynamoDB table.

.. code-block:: python

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

    class UserModel(Model):
        """
        A DynamoDB User
        """
        class Meta:
            table_name = "dynamodb-user"
        email = UnicodeAttribute(null=True)
        first_name = UnicodeAttribute(range_key=True)
        last_name = UnicodeAttribute(hash_key=True)

PynamoDB allows you to create the table if needed (it must exist before you can use it!):

.. code-block:: python

    UserModel.create_table(read_capacity_units=1, write_capacity_units=1)

Create a new user:

.. code-block:: python

    user = UserModel("John", "Denver")
    user.email = "djohn@company.org"
    user.save()

Now, search your table for all users with a last name of 'Denver' and whose
first name begins with 'J':

.. code-block:: python

    for user in UserModel.query("Denver", UserModel.first_name.startswith("J")):
        print(user.first_name)

Examples of ways to query your table with filter conditions:

.. code-block:: python

    for user in UserModel.query("Denver", UserModel.email=="djohn@company.org"):
        print(user.first_name)

Retrieve an existing user:

.. code-block:: python

    try:
        user = UserModel.get("John", "Denver")
        print(user)
    except UserModel.DoesNotExist:
        print("User does not exist")

Upgrade Warning
===============

The behavior of 'UnicodeSetAttribute' has changed in backwards-incompatible ways
as of the 1.6.0 and 3.0.1 releases of PynamoDB.

See `UnicodeSetAttribute upgrade docs <https://pynamodb.readthedocs.io/en/latest/release_notes.html>`_
for detailed instructions on how to safely perform the upgrade.

Advanced Usage
==============

Want to use indexes? No problem:

.. code-block:: python

    from pynamodb.models import Model
    from pynamodb.indexes import GlobalSecondaryIndex, AllProjection
    from pynamodb.attributes import NumberAttribute, UnicodeAttribute

    class ViewIndex(GlobalSecondaryIndex):
        class Meta:
            read_capacity_units = 2
            write_capacity_units = 1
            projection = AllProjection()
        view = NumberAttribute(default=0, hash_key=True)

    class TestModel(Model):
        class Meta:
            table_name = "TestModel"
        forum = UnicodeAttribute(hash_key=True)
        thread = UnicodeAttribute(range_key=True)
        view = NumberAttribute(default=0)
        view_index = ViewIndex()

Now query the index for all items with 0 views:

.. code-block:: python

    for item in TestModel.view_index.query(0):
        print("Item queried from index: {0}".format(item))

It's really that simple.


Want to use DynamoDB local? Just add a ``host`` name attribute and specify your local server.

.. code-block:: python

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

    class UserModel(Model):
        """
        A DynamoDB User
        """
        class Meta:
            table_name = "dynamodb-user"
            host = "http://localhost:8000"
        email = UnicodeAttribute(null=True)
        first_name = UnicodeAttribute(range_key=True)
        last_name = UnicodeAttribute(hash_key=True)

Want to enable streams on a table? Just add a ``stream_view_type`` name attribute and specify
the type of data you'd like to stream.

.. code-block:: python

    from pynamodb.models import Model
    from pynamodb.attributes import UnicodeAttribute
    from pynamodb.constants import STREAM_NEW_AND_OLD_IMAGE

    class AnimalModel(Model):
        """
        A DynamoDB Animal
        """
        class Meta:
            table_name = "dynamodb-user"
            host = "http://localhost:8000"
            stream_view_type = STREAM_NEW_AND_OLD_IMAGE
        type = UnicodeAttribute(null=True)
        name = UnicodeAttribute(range_key=True)
        id = UnicodeAttribute(hash_key=True)

Features
========

* Python >= 3.7 support
* An ORM-like interface with query and scan filters
* Compatible with DynamoDB Local
* Supports the entire DynamoDB API
* Support for Unicode, Binary, JSON, Number, Set, and UTC Datetime attributes
* Support for Global and Local Secondary Indexes
* Provides iterators for working with queries, scans, that are automatically paginated
* Automatic pagination for bulk operations
* Complex queries
* Batch operations with automatic pagination
* Iterators for working with Query and Scan operations

            

Raw data

            {
    "_id": null,
    "home_page": "http://jlafon.io/pynamodb.html",
    "name": "pynamodb",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": "",
    "keywords": "python dynamodb amazon",
    "author": "Jharrod LaFon",
    "author_email": "jlafon@eyesopen.com",
    "download_url": "https://files.pythonhosted.org/packages/d7/a0/1ad2bc437288e9a0524a49d338401d0cea0fd7fc1d744b01b6bca0b0cb49/pynamodb-6.0.0.tar.gz",
    "platform": null,
    "description": "========\nPynamoDB\n========\n\n.. image:: https://img.shields.io/pypi/v/pynamodb.svg\n    :target: https://pypi.python.org/pypi/pynamodb/\n.. image:: https://img.shields.io/conda/vn/conda-forge/pynamodb.svg\n    :target: https://anaconda.org/conda-forge/pynamodb\n.. image:: https://github.com/pynamodb/PynamoDB/workflows/Tests/badge.svg\n    :target: https://github.com/pynamodb/PynamoDB/actions\n.. image:: https://img.shields.io/coveralls/pynamodb/PynamoDB/master.svg\n    :target: https://coveralls.io/github/pynamodb/PynamoDB\n\nA Pythonic interface for Amazon's `DynamoDB <https://aws.amazon.com/dynamodb/>`_.\n\nDynamoDB is a great NoSQL service provided by Amazon, but the API is verbose.\nPynamoDB presents you with a simple, elegant API.\n\nUseful links:\n\n* See the full documentation at https://pynamodb.readthedocs.io/\n* Ask questions in the `GitHub issues <https://github.com/pynamodb/PynamoDB/issues>`_\n* See release notes at https://pynamodb.readthedocs.io/en/latest/release_notes.html\n\nInstallation\n============\nFrom PyPi::\n\n    $ pip install pynamodb\n\nFrom GitHub::\n\n    $ pip install git+https://github.com/pynamodb/PynamoDB#egg=pynamodb\n\nFrom conda-forge::\n\n    $ conda install -c conda-forge pynamodb\n\n\nBasic Usage\n===========\n\nCreate a model that describes your DynamoDB table.\n\n.. code-block:: python\n\n    from pynamodb.models import Model\n    from pynamodb.attributes import UnicodeAttribute\n\n    class UserModel(Model):\n        \"\"\"\n        A DynamoDB User\n        \"\"\"\n        class Meta:\n            table_name = \"dynamodb-user\"\n        email = UnicodeAttribute(null=True)\n        first_name = UnicodeAttribute(range_key=True)\n        last_name = UnicodeAttribute(hash_key=True)\n\nPynamoDB allows you to create the table if needed (it must exist before you can use it!):\n\n.. code-block:: python\n\n    UserModel.create_table(read_capacity_units=1, write_capacity_units=1)\n\nCreate a new user:\n\n.. code-block:: python\n\n    user = UserModel(\"John\", \"Denver\")\n    user.email = \"djohn@company.org\"\n    user.save()\n\nNow, search your table for all users with a last name of 'Denver' and whose\nfirst name begins with 'J':\n\n.. code-block:: python\n\n    for user in UserModel.query(\"Denver\", UserModel.first_name.startswith(\"J\")):\n        print(user.first_name)\n\nExamples of ways to query your table with filter conditions:\n\n.. code-block:: python\n\n    for user in UserModel.query(\"Denver\", UserModel.email==\"djohn@company.org\"):\n        print(user.first_name)\n\nRetrieve an existing user:\n\n.. code-block:: python\n\n    try:\n        user = UserModel.get(\"John\", \"Denver\")\n        print(user)\n    except UserModel.DoesNotExist:\n        print(\"User does not exist\")\n\nUpgrade Warning\n===============\n\nThe behavior of 'UnicodeSetAttribute' has changed in backwards-incompatible ways\nas of the 1.6.0 and 3.0.1 releases of PynamoDB.\n\nSee `UnicodeSetAttribute upgrade docs <https://pynamodb.readthedocs.io/en/latest/release_notes.html>`_\nfor detailed instructions on how to safely perform the upgrade.\n\nAdvanced Usage\n==============\n\nWant to use indexes? No problem:\n\n.. code-block:: python\n\n    from pynamodb.models import Model\n    from pynamodb.indexes import GlobalSecondaryIndex, AllProjection\n    from pynamodb.attributes import NumberAttribute, UnicodeAttribute\n\n    class ViewIndex(GlobalSecondaryIndex):\n        class Meta:\n            read_capacity_units = 2\n            write_capacity_units = 1\n            projection = AllProjection()\n        view = NumberAttribute(default=0, hash_key=True)\n\n    class TestModel(Model):\n        class Meta:\n            table_name = \"TestModel\"\n        forum = UnicodeAttribute(hash_key=True)\n        thread = UnicodeAttribute(range_key=True)\n        view = NumberAttribute(default=0)\n        view_index = ViewIndex()\n\nNow query the index for all items with 0 views:\n\n.. code-block:: python\n\n    for item in TestModel.view_index.query(0):\n        print(\"Item queried from index: {0}\".format(item))\n\nIt's really that simple.\n\n\nWant to use DynamoDB local? Just add a ``host`` name attribute and specify your local server.\n\n.. code-block:: python\n\n    from pynamodb.models import Model\n    from pynamodb.attributes import UnicodeAttribute\n\n    class UserModel(Model):\n        \"\"\"\n        A DynamoDB User\n        \"\"\"\n        class Meta:\n            table_name = \"dynamodb-user\"\n            host = \"http://localhost:8000\"\n        email = UnicodeAttribute(null=True)\n        first_name = UnicodeAttribute(range_key=True)\n        last_name = UnicodeAttribute(hash_key=True)\n\nWant to enable streams on a table? Just add a ``stream_view_type`` name attribute and specify\nthe type of data you'd like to stream.\n\n.. code-block:: python\n\n    from pynamodb.models import Model\n    from pynamodb.attributes import UnicodeAttribute\n    from pynamodb.constants import STREAM_NEW_AND_OLD_IMAGE\n\n    class AnimalModel(Model):\n        \"\"\"\n        A DynamoDB Animal\n        \"\"\"\n        class Meta:\n            table_name = \"dynamodb-user\"\n            host = \"http://localhost:8000\"\n            stream_view_type = STREAM_NEW_AND_OLD_IMAGE\n        type = UnicodeAttribute(null=True)\n        name = UnicodeAttribute(range_key=True)\n        id = UnicodeAttribute(hash_key=True)\n\nFeatures\n========\n\n* Python >= 3.7 support\n* An ORM-like interface with query and scan filters\n* Compatible with DynamoDB Local\n* Supports the entire DynamoDB API\n* Support for Unicode, Binary, JSON, Number, Set, and UTC Datetime attributes\n* Support for Global and Local Secondary Indexes\n* Provides iterators for working with queries, scans, that are automatically paginated\n* Automatic pagination for bulk operations\n* Complex queries\n* Batch operations with automatic pagination\n* Iterators for working with Query and Scan operations\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A Pythonic Interface to DynamoDB",
    "version": "6.0.0",
    "project_urls": {
        "Homepage": "http://jlafon.io/pynamodb.html",
        "Source": "https://github.com/pynamodb/PynamoDB"
    },
    "split_keywords": [
        "python",
        "dynamodb",
        "amazon"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "232e3a37db367027627a17830f949ec7615485b84aecfabb73d6a066173b22a3",
                "md5": "9076329f6b1175de433da7aedb9bac19",
                "sha256": "7217f87b6e5c9866d915265fd462fa4a012b37b0149bf1f814b33100b50e901f"
            },
            "downloads": -1,
            "filename": "pynamodb-6.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "9076329f6b1175de433da7aedb9bac19",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 61075,
            "upload_time": "2024-01-14T15:41:37",
            "upload_time_iso_8601": "2024-01-14T15:41:37.244937Z",
            "url": "https://files.pythonhosted.org/packages/23/2e/3a37db367027627a17830f949ec7615485b84aecfabb73d6a066173b22a3/pynamodb-6.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d7a01ad2bc437288e9a0524a49d338401d0cea0fd7fc1d744b01b6bca0b0cb49",
                "md5": "277ec41b88d775329ecf245d2e42cbd8",
                "sha256": "05b3aa02021050393e0667944a20af3da60f55984de86126786844c2d47b9a18"
            },
            "downloads": -1,
            "filename": "pynamodb-6.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "277ec41b88d775329ecf245d2e42cbd8",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 94429,
            "upload_time": "2024-01-14T15:41:39",
            "upload_time_iso_8601": "2024-01-14T15:41:39.250749Z",
            "url": "https://files.pythonhosted.org/packages/d7/a0/1ad2bc437288e9a0524a49d338401d0cea0fd7fc1d744b01b6bca0b0cb49/pynamodb-6.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-01-14 15:41:39",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "pynamodb",
    "github_project": "PynamoDB",
    "travis_ci": false,
    "coveralls": true,
    "github_actions": true,
    "lcname": "pynamodb"
}
        
Elapsed time: 0.16404s