Skip to main content

SQLAlchemy-style ORM for Amazon's DynamoDB

Project description

Flywheel

Build:

build coverage

Documentation:

http://flywheel.readthedocs.org/

Downloads:

http://pypi.python.org/pypi/flywheel

Source:

https://github.com/stevearc/flywheel

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(type=int)
    top_score_time = Field(type=datetime)
    wins = Field(type=int)
    losses = Field(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.5.3

  • Bug fix: Fix refresh when using custom-typed primary keys

0.5.2

  • Bug fix: Change limit behavior to match docs. query().limit() will limit the number of results, query().scan_limit() will limit number of items scanned

0.5.1

  • Feature: Add update_schema() method to Engine

0.5.0

  • Breakage: Removing support for overflow fields. The only fields flywheel will care about now are those that are explicitly set as a Field()

  • Flywheel no longer forces raise_on_conflict to be True when you sync changes to fields that are part of a composite field. It is now up to the user to avoid putting their composite fields into an inconsistent state.

  • Feature: sync() has a new argument, no_read, which changes the behavior for syncing models with no changes. Instead of performing a GET, it will leave them as-is. This should make it easer to perform batch syncs without worrying as much about wasted bandwidth on GETs.

  • Field has renamed the data_type argument to type (data_type will still work)

0.4.11

  • Bug fix: Boolean overflow fields no longer decoded as decimals

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flywheel-0.5.3.tar.gz (30.0 kB view details)

Uploaded Source

Built Distribution

flywheel-0.5.3-py2.py3-none-any.whl (32.6 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file flywheel-0.5.3.tar.gz.

File metadata

  • Download URL: flywheel-0.5.3.tar.gz
  • Upload date:
  • Size: 30.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/39.2.0 requests-toolbelt/0.8.0 tqdm/4.24.0 CPython/2.7.15rc1

File hashes

Hashes for flywheel-0.5.3.tar.gz
Algorithm Hash digest
SHA256 9105da7c199e20c4df79bb466159485b80cdd5a1db9ee97c3c545bf5a5aca922
MD5 3dd1dc14361cf12317299cc30c0c48e6
BLAKE2b-256 677f0e94b8f30b2730c3c7d8fbc92d98eba67215f51cf59d5c74ef5d556472d1

See more details on using hashes here.

File details

Details for the file flywheel-0.5.3-py2.py3-none-any.whl.

File metadata

  • Download URL: flywheel-0.5.3-py2.py3-none-any.whl
  • Upload date:
  • Size: 32.6 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/39.2.0 requests-toolbelt/0.8.0 tqdm/4.24.0 CPython/2.7.15rc1

File hashes

Hashes for flywheel-0.5.3-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 f222a9c8f7b273530ad3f6e227fdaab5af9b9a45039fb324c3fceea7b0703466
MD5 a44b5e729afdd4f129e625154598c23d
BLAKE2b-256 3fd82277a99fbc64a6b5c6f27c2b264865a759f3373319cf0756578b974091e8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page