SQLAlchemy-style ORM for Amazon's DynamoDB
Project description
Flywheel
- Build:
- Documentation:
- Downloads:
- Source:
Object mapper for Amazon’s DynamoDB
Getting Started
This is what a basic model looks like (schema taken from this DynamoDB API documentation)
from flywheel import Model, Field, GlobalIndex class GameScore(Model): __metadata__ = { 'global_indexes': [ GlobalIndex('GameTitleIndex', 'title', 'top_score') ], } userid = Field(hash_key=True) title = Field(range_key=True) top_score = Field(data_type=int) top_score_time = Field(data_type=datetime) wins = Field(data_type=int) losses = Field(data_type=int) def __init__(self, title, userid): self.title = title self.userid = userid
Create a new top score
>>> score = GameScore('Master Blaster', 'abc') >>> score.top_score = 9001 >>> score.top_score_time = datetime.utcnow() >>> engine.sync(score)
Get all top scores for a user
>>> scores = engine.query(GameScore).filter(userid='abc').all()
Get the top score for Galaxy Invaders
>>> top_score = engine.query(GameScore).filter(title='Galaxy Invaders')\ ... .first(desc=True)
Atomically increment a user’s “wins” count on Alien Adventure
>>> score = GameScore('Alien Adventure', 'abc') >>> score.incr_(wins=1) >>> engine.sync(score)
Get all scores on Comet Quest that are over 9000
>>> scores = engine.query(GameScore).filter(GameScore.top_score > 9000, ... title='Comet Quest').all()
Changelog
0.4.10
Feature: Add exists() method to Engine
0.4.9
Feature: Add save() method to Models
Feature: Add update_field() method to Engine
0.4.8
Bug fix: Bad function call in index_pk_dict_
0.4.7
New index_pk_dict_ method for constructing exclusive_start_key for index queries
0.4.6
Pass exclusive_start_key through to dynamo3
0.4.5
Bug fix: Calling refresh() could sometimes crash from unordered results.
0.4.4
Bug fix: Mutable field defaults are no longer shared among model instances
0.4.3
Bug fix: Incorrect ConditionalCheckFailedException when syncing changes to a Composite field.
Allow DateTimeType to be stored as a naive datetime.
0.4.2
Make the dict, list, and bool types backwards-compatible with the old json-serialized format
Allow queries to use in, not null, and a few other constraints that were missing
Models are smarter about marking fields as dirty for sync
Stopped using deprecated expected syntax for dynamo3
0.4.1
Warning: Stored datetime objects will now be timezone-aware
Warning: Stored datetime objects will now keep their microseconds
0.4.0
Breakage: Dropping support for python 3.2 due to lack of botocore support
Breakage: Changing the list, dict, and bool data types to use native DynamoDB types instead of JSON serializing
Breakage and bug fix: Fixing serialization of datetime and date objects (for more info see the commit)
Feature: Can now do ‘contains’ filters on lists
Feature: Fields support multiple validation checks
Feature: Fields have an easy way to enforce non-null values (nullable=False)
Data type changes are due to an update in the DynamoDB API
0.3.0
Breakage: Engine namespace is slightly different. If you pass in a string it will be used as the table name prefix with no additional ‘-’ added.
0.2.1
Breakage: Certain queries may now require you to specify an index where it was auto-detected before
Feature: Queries can now filter on non-indexed fields
Feature: More powerful “sync-if” constraints
Feature: Can OR together filter constraints in queries
All changes are due to an update in the DynamoDB API
0.2.0
Breakage: Engine no longer accepts boto connections (using dynamo3 instead)
Breakage: Removing S3Type (no longer have boto as dependency)
Feature: Support Python 3.2 and 3.3
Feature: .count() terminator for queries
Feature: Can override throughputs in Engine.create_schema()
Bug fix: Engine namespace is truly isolated
0.1.3
Bug fix: Some queries fail when global index has no range key
0.1.2
Bug fix: Field names can begin with an underscore
Feature: Models have a nice default __init__ method
0.1.1
Bug fix: Can call incr_() on models that have not been saved yet
Bug fix: Model comparison with None
0.1.0
First public release
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file flywheel-0.4.10.tar.gz
.
File metadata
- Download URL: flywheel-0.4.10.tar.gz
- Upload date:
- Size: 29.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6d78cd323c2cb0cdd6880904ef11030afecec68406623cdaa51f08670a005ee3 |
|
MD5 | d856713fbafad7a22e3cc91ed53fff7c |
|
BLAKE2b-256 | da8de9878bcbd558783344b1927076eae791d69127063c26352072f4c5dc9410 |
File details
Details for the file flywheel-0.4.10-py2.py3-none-any.whl
.
File metadata
- Download URL: flywheel-0.4.10-py2.py3-none-any.whl
- Upload date:
- Size: 35.6 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 15c944f106c758a116bb15f09387db36ce5a1baec4ed4daec90e17774bbed7c6 |
|
MD5 | 6ff69b020f39c15689ab253991186859 |
|
BLAKE2b-256 | e92b5d258a0b0451e7b443ad1db49bbc056b30cb7989f4211e44e31303dee806 |