- Notifications
You must be signed in to change notification settings - Fork5
Fork of pynamodb/PynamoDB open source project
License
lyft/PynamoDB
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
A Pythonic interface for Amazon'sDynamoDB.
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 athttps://pynamodb.readthedocs.io/
- Ask questions in theGitHub issues
- See release notes athttps://pynamodb.readthedocs.io/en/latest/release_notes.html
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
Create a model that describes your DynamoDB table.
frompynamodb.modelsimportModelfrompynamodb.attributesimportUnicodeAttributeclassUserModel(Model):""" A DynamoDB User """classMeta: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!):
UserModel.create_table(read_capacity_units=1,write_capacity_units=1)
Create a new user:
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 whosefirst name begins with 'J':
foruserinUserModel.query("Denver",UserModel.first_name.startswith("J")):print(user.first_name)
Examples of ways to query your table with filter conditions:
foruserinUserModel.query("Denver",UserModel.email=="djohn@company.org"):print(user.first_name)
Retrieve an existing user:
try:user=UserModel.get("John","Denver")print(user)exceptUserModel.DoesNotExist:print("User does not exist")
The behavior of 'UnicodeSetAttribute' has changed in backwards-incompatible waysas of the 1.6.0 and 3.0.1 releases of PynamoDB.
SeeUnicodeSetAttribute upgrade docsfor detailed instructions on how to safely perform the upgrade.
Want to use indexes? No problem:
frompynamodb.modelsimportModelfrompynamodb.indexesimportGlobalSecondaryIndex,AllProjectionfrompynamodb.attributesimportNumberAttribute,UnicodeAttributeclassViewIndex(GlobalSecondaryIndex):classMeta:read_capacity_units=2write_capacity_units=1projection=AllProjection()view=NumberAttribute(default=0,hash_key=True)classTestModel(Model):classMeta: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:
foriteminTestModel.view_index.query(0):print("Item queried from index: {0}".format(item))
It's really that simple.
Want to use DynamoDB local? Just add ahost
name attribute and specify your local server.
frompynamodb.modelsimportModelfrompynamodb.attributesimportUnicodeAttributeclassUserModel(Model):""" A DynamoDB User """classMeta: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 astream_view_type
name attribute and specifythe type of data you'd like to stream.
frompynamodb.modelsimportModelfrompynamodb.attributesimportUnicodeAttributefrompynamodb.constantsimportSTREAM_NEW_AND_OLD_IMAGEclassAnimalModel(Model):""" A DynamoDB Animal """classMeta:table_name="dynamodb-user"host="http://localhost:8000"stream_view_type=STREAM_NEW_AND_OLD_IMAGEtype=UnicodeAttribute(null=True)name=UnicodeAttribute(range_key=True)id=UnicodeAttribute(hash_key=True)
- 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
About
Fork of pynamodb/PynamoDB open source project
Resources
License
Stars
Watchers
Forks
Packages0
Languages
- Python100.0%