• Bug fix: Fix refresh when using custom-typed primary keys (:pr:`63`)


  • 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 (issue 57)


  • Feature: Add update_schema() method to Engine (:pr:`53`)


  • 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)


  • Bug fix: Boolean overflow fields no longer decoded as decimals (:pr:`46`)


  • Feature: Add exists() method to Engine (issue 45)


  • Feature: Add save() method to Models (issue 40)
  • Feature: Add update_field() method to Engine (issue 43)


  • Bug fix: Bad function call in index_pk_dict_


  • New index_pk_dict_ method for constructing exclusive_start_key for index queries (issue 34)


  • Pass exclusive_start_key through to dynamo3 (issue 34)


  • Bug fix: Calling refresh() could sometimes crash from unordered results.


  • Bug fix: Mutable field defaults are no longer shared among model instances


  • Bug fix: Incorrect ConditionalCheckFailedException when syncing changes to a Composite field.
  • Allow DateTimeType to be stored as a naive datetime.


  • Make the dict, list, and bool types backwards-compatible with the old json-serialized format (:pr:`24`)
  • Allow queries to use in, not null, and a few other constraints that were missing (commit 8b8854d)
  • Models are smarter about marking fields as dirty for sync (issue 26)
  • Stopped using deprecated expected syntax for dynamo3


  • Warning: Stored datetime objects will now be timezone-aware (commit a7c253d)
  • Warning: Stored datetime objects will now keep their microseconds (commit fffe92c)


  • 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) (commit df049af)
  • 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


  • 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.


  • 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


  • 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 (commit bf3261c)
  • Feature: Can override throughputs in Engine.create_schema() (commit 4d1abe0)
  • Bug fix: Engine namespace is truly isolated (commit 3b4fad7)





  • First public release