========
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": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "python dynamodb amazon",
"author": "Jharrod LaFon",
"author_email": "jlafon@eyesopen.com",
"download_url": "https://files.pythonhosted.org/packages/05/29/9087e83d65ffcdfeb6eb3cc4678457ac65ab836dc586d956ba52652e3fb2/pynamodb-6.0.1.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.1",
"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": "e92e12cb2f072c5475eb9a96259de112227e15cb7d174b4168de69e4b253de6b",
"md5": "ffa4928bab22214154f14ec45a61f94b",
"sha256": "c7aacedcf0cbebd14f9ea7e9347f86459b280ec9506ff34ea5981ffdc02d2d59"
},
"downloads": -1,
"filename": "pynamodb-6.0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "ffa4928bab22214154f14ec45a61f94b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 61107,
"upload_time": "2024-05-29T18:50:28",
"upload_time_iso_8601": "2024-05-29T18:50:28.460250Z",
"url": "https://files.pythonhosted.org/packages/e9/2e/12cb2f072c5475eb9a96259de112227e15cb7d174b4168de69e4b253de6b/pynamodb-6.0.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "05299087e83d65ffcdfeb6eb3cc4678457ac65ab836dc586d956ba52652e3fb2",
"md5": "afc044f199672fc35f9af60c87093890",
"sha256": "53692d35d5b3fe01e085f260166c869a750a280d40c6af7d48fd67623777faaa"
},
"downloads": -1,
"filename": "pynamodb-6.0.1.tar.gz",
"has_sig": false,
"md5_digest": "afc044f199672fc35f9af60c87093890",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 94687,
"upload_time": "2024-05-29T18:50:31",
"upload_time_iso_8601": "2024-05-29T18:50:31.185018Z",
"url": "https://files.pythonhosted.org/packages/05/29/9087e83d65ffcdfeb6eb3cc4678457ac65ab836dc586d956ba52652e3fb2/pynamodb-6.0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-05-29 18:50:31",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "pynamodb",
"github_project": "PynamoDB",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"lcname": "pynamodb"
}