NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2335 most downloaded on PyPI
A Pythonic Interface to DynamoDB
Last release 1 years ago
02 Jun 2025
Release timing varies
gaps range from 8 days to 8 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
13 years old
94 releases · first in 2014
allow setting or unsetting the boto retry configuration by @ryancausey in #1271
Model.delete_table by @ryancausey in #1270Full Changelog: 6.0.2...6.1.0
Features:
Add a wait argument to Model.delete_table ( #1270 )
Add the ability to set or unset the boto retry configuration ( #1271 )
This adds the ability to directly set the boto retry configuration dictionary, or to leave it unset and allow botocore to automatically discover the configuration from the environment or ~/.aws/config files.
A new setting retry_configuration was added to configure this behavior.
The default behavior of PynamoDB in regards to configuring retries remains the same as before.
One column per quarter.
Fix DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. by @shcherbin in #1261
Full Changelog: 6.0.1...6.0.2
Fixes:
Fix a warning about datetime.utcfromtimestamp deprecation ( #1261 )
For failed transaction, return the underlying item in cancellation_reasons[...].raw_item ( #1226 ). This only applies when passing return_values=ALL_O
Features:
cancellation_reasons[...].raw_item (#1226). This only applies when passing return_values=ALL_OLD.Fixes:
extra_headers feature. These headers are intended for proxies that strip them, so they should be excluded from the AWS signature.Full Changelog: 6.0.0...6.0.1
This is a major release with breaking changes.
This is a major release with breaking changes.
Please read the release notes carefully for a full list of changes.
This is a major release and contains breaking changes. Please read the notes below carefully.
Breaking changes:
BinaryAttribute and BinarySetAttribute have undergone breaking changes:
The attributes’ internal encoding has changed. To prevent this change going unnoticed, a new required legacy_encoding parameter was added: see Upgrading Binary(Set)Attribute for details. If your codebase uses BinaryAttribute or BinarySetAttribute , go over the attribute declarations and mark them accordingly.
When using binary attributes, the return value of serialize() will no longer be JSON-serializable since it will contain bytes objects. Use to_dynamodb_dict() and to_simple_dict() for JSON-serializable mappings. for a safe JSON-serializable representation.
Python 3.6 is no longer supported.
PynamoDB no longer has a default AWS region (used to be us-east-1) ( #1003 ). If needed, update your models’ Meta or set the AWS_DEFAULT_REGION environment variable.
Model ’s JSON serialization helpers were changed:
to_json was renamed to to_simple_dict() ( #1126 ). Additionally, to_dynamodb_dict() and from_dynamodb_dict() were added for round-trip JSON serialization.
pynamodb.util.attribute_value_to_json was removed ( #1126 )
Attribute ’s default parameter must be either an immutable value (of one of the built-in immutable types) or a callable. This prevents a common class of errors caused by unintentionally mutating the default value. A simple workaround is to pass an initializer (e.g. change default={} to default=dict ) or wrap in a lambda (e.g. change default={'foo': 'bar'} to default=lambda: {'foo': 'bar'} ).
count() , query() , and scan() are now instance methods.
OperationSettings has been removed.
Major changes:
We are now compatible with opentelemetry botocore instrumentation .
We’ve reduced our usage of botocore private APIs ( #1079 ). On multiple occasions, new versions of botocore broke PynamoDB, and this change lessens the likelihood of that happening in the future by reducing (albeit not eliminating) our reliance on private botocore APIs.
Minor changes:
save() , update() , delete_item() , and delete() now accept a add_version_condition parameter. See Conditioning on the version for more details.
batch_get() , has guard rails defending against items without a hash_key and range_key.
set() , can remove attribute by assigning an empty value in the update expression.
This is a major release and contains breaking changes. Please read the notes below carefully.
Breaking changes:
~pynamodb.attributes.BinaryAttribute and ~pynamodb.attributes.BinarySetAttribute have undergone breaking changes:
The attributes' internal encoding has changed. To prevent this change going unnoticed, a new required legacy_encoding parameter was added: see upgrading_binary for details. If your codebase uses ~pynamodb.attributes.BinaryAttribute or ~pynamodb.attributes.BinarySetAttribute, go over the attribute declarations and mark them accordingly.
When using binary attributes, the return value of ~pynamodb.models.Model.serialize will no longer be JSON-serializable since it will contain bytes objects. Use ~pynamodb.attributes.AttributeContainer.to_dynamodb_dict and ~pynamodb.attributes.AttributeContainer.to_simple_dict for JSON-serializable mappings. for a safe JSON-serializable representation.
Python 3.6 is no longer supported.
PynamoDB no longer has a default AWS region (used to be us-east-1) (1003). If needed, update your models' Meta or set the AWS_DEFAULT_REGION environment variable.
~pynamodb.models.Model's JSON serialization helpers were changed:
to_json was renamed to ~pynamodb.attributes.AttributeContainer.to_simple_dict (1126). Additionally, ~pynamodb.attributes.AttributeContainer.to_dynamodb_dict and ~pynamodb.attributes.AttributeContainer.from_dynamodb_dict were added for round-trip JSON serialization.
pynamodb.util.attribute_value_to_json was removed (1126)
~pynamodb.attributes.Attribute's default parameter must be either an immutable value (of one of the built-in immutable types) or a callable. This prevents a common class of errors caused by unintentionally mutating the default value. A simple workaround is to pass an initializer (e.g. change default={} to default=dict) or wrap in a lambda (e.g. change default={'foo': 'bar'} to default=lambda: {'foo': 'bar'}).
~pynamodb.indexes.Index.count, ~pynamodb.indexes.Index.query, and ~pynamodb.indexes.Index.scan are now instance methods.
~pynamodb.settings.OperationSettings has been removed.
Major changes:
We are now compatible with opentelemetry botocore instrumentation.
We've reduced our usage of botocore private APIs (1079). On multiple occasions, new versions of botocore broke PynamoDB, and this change lessens the likelihood of that happening in the future by reducing (albeit not eliminating) our reliance on private botocore APIs.
Minor changes:
~pynamodb.models.Model.save, ~pynamodb.models.Model.update, ~pynamodb.models.Model.delete_item, and ~pynamodb.models.Model.delete now accept a add_version_condition parameter. See optimistic_locking_version_condition for more details.
~pynamodb.models.Model.batch_get, has guard rails defending against items without a hash_key and range_key.
~pynamodb.attributes.Attribute.set, can remove attribute by assigning an empty value in the update expression.
Nothing published for this version
Fix compatibility with botocore 1.33.2 by @ikonst in #1206
Full Changelog: 5.5.0...5.5.1
Add 'add_version_condition' arg by @ikonst in #1177
save() , update() , delete_item() , and delete() now accept a add_version_condition parameter. See Conditioning on the version for more details.
~pynamodb.models.Model.save, ~pynamodb.models.Model.update, ~pynamodb.models.Model.delete_item, and ~pynamodb.models.Model.delete now accept a add_version_condition parameter. See optimistic_locking_version_condition for more details.
Use model's AWS credentials in threads by @atsuoishimoto
Full Changelog: 5.4.0...5.4.1
Use model’s AWS credentials in threads (#1164)
A model can specify custom AWS credentials in the Meta class (in lieu of “global” AWS credentials from the environment). Previously those model-specific credentials were not used from within new threads.
Contributors to this release:
@atsuoishimoto
Expose transaction cancellation reasons by @ikonst in #1156
Full Changelog: 5.3.5...5.4.0
Expose transaction cancellation reasons in cancellation_reasons() and cancellation_reasons() (#1144).
Expose transaction cancellation reasons in ~pynamodb.exceptions.TransactWriteError.cancellation_reasons and ~pynamodb.exceptions.TransactGetError.cancellation_reasons (#1144).
Fix exception message by @ikonst, @pauliokas in https://github.com/pynamodb/PynamoDB/pull/1157
Full Changelog: https://github.com/pynamodb/PynamoDB/compare/5.3.4...5.3.5
Propagate null_check to maps in lists by @ikonst in https://github.com/pynamodb/PynamoDB/pull/1128
Full Changelog: https://github.com/pynamodb/PynamoDB/compare/5.3.3...5.3.4
Allow handling an exception raised when retrieving the first item by @ikonst in https://github.com/pynamodb/PynamoDB/pull/1121
Full Changelog: https://github.com/pynamodb/PynamoDB/compare/5.3.2...5.3.3
Do not package typing_tests by @musicinmybrain in https://github.com/pynamodb/PynamoDB/pull/1118
Full Changelog: https://github.com/pynamodb/PynamoDB/compare/5.3.1...5.3.2
Prevent typing_tests from being installed into site-packages ( #1118 )
Contributors to this release:
@musicinmybrain
Connection: call describe_table as needed by @ikonst in https://github.com/pynamodb/PynamoDB/pull/1114
Full Changelog: https://github.com/pynamodb/PynamoDB/compare/5.3.0...5.3.1
Fixed issue introduced in 5.3.0: using TableConnection directly (not through a model) raised the following exception:
pynamodb . exceptions . TableError : Meta - table for '(table-name)' not initialized
Fix typing on TransactGet (backport of #1057 )
Fixed issue introduced in 5.3.0: using ~pynamodb.connection.table.TableConnection directly (not through a model) raised the following exception:
pynamodb.exceptions.TableError: Meta-table for '(table-name)' not initialized
Fix typing on ~pynamodb.transactions.TransactGet (backport of 1057)
Do not call DescribeTable for models by @ikonst in https://github.com/pynamodb/PynamoDB/pull/1095
Full Changelog: https://github.com/pynamodb/PynamoDB/compare/5.2.3...5.3.0
No longer call DescribeTable API before first operation
Before this change, we would call DescribeTable before the first operation on a given table in order to discover its schema. This slowed down bootstrap (particularly important for lambdas), complicated testing and could potentially cause inconsistent behavior since queries were serialized using the table’s (key) schema but deserialized using the model’s schema.
With this change, both queries and models now use the model’s schema.
Update for botocore 1.28 private API change (#1087) which caused the following exception: ` TypeError: Cannot mix str and non-str arguments `
Update for botocore 1.28 private API change (#1087) which caused the following exception:
TypeError: Cannot mix str and non-str arguments
Full Changelog: https://github.com/pynamodb/PynamoDB/compare/5.2.2...5.2.3
Backporting #1083 update for a botocore 1.28 private API change which caused the following exception: ` TypeError: _convert_to_request_dict() missing
Backporting #1083 update for a botocore 1.28 private API change which caused the following exception:
TypeError: _convert_to_request_dict() missing 1 required positional argument: 'endpoint_url'
Full Changelog: https://github.com/pynamodb/PynamoDB/compare/5.2.1...5.2.2
Update for botocore 1.28 private API change ( #1083 ) which caused the following exception:
TypeError : _convert_to_request_dict () missing 1 required positional argument : 'endpoint_url'
This is a backwards compatible, minor release.
This is a backwards compatible, minor release.
Please read the release notes for a full list of changes
Fix issue from 5.2.0 with attempting to set GSI provisioned throughput on PAY_PER_REQUEST billing mode ( #1018 )
This is a backwards compatible, minor release.
This is a backwards compatible, minor release.
Please read the release notes for a full list of changes.
The IndexMeta class has been removed. Now type(Index) == type ( #998 )
JSON serialization support ( Model.to_json and Model.from_json ) has been added ( #857 )
Improved type annotations for expressions and transactions ( #951 , #991 )
Always use Model attribute definitions in create table schema ( #996 )
Introduce DynamicMapAttribute to enable partially defining attributes on a MapAttribute
DynamicMapAttribute to enable partially defining attributes on a MapAttribute (#868)is_in conditional expression (#947)This version has an unintentional breaking change:
date 2021-02-14
This version has an unintentional breaking change:
Propagate Model.serialize ’s null_check parameter to nested MapAttributes ( #908 )
Previously null errors (persisting None into an attribute defined as null=False ) were ignored for attributes in map attributes that were nested in maps or lists. After upgrade, these will resulted in an AttributeNullError being raised.
It is more efficient not to serialize attributes you don't need, and it also avoids tripping null-checks on unrelated attributes when doing updates or
It is more efficient not to serialize attributes you don't need, and it also avoids tripping null-checks on unrelated attributes when doing updates or deletes.
date 2021-02-11
Do not serialize all attributes for updates and deletes ( #905 )
- Fix type errors when deriving from a MapAttribute and another type
date 2021-02-10
Fix type errors when deriving from a MapAttribute and another type ( #904 )
This is a major release with breaking changes.
This is a major release with breaking changes.
Please read the release notes carefully for a full list of changes.
date 2021-01-26
This is major release and contains breaking changes. Please read the notes below carefully.
Breaking changes:
Python 2 is no longer supported. Python 3.6 or greater is now required.
UnicodeAttribute and BinaryAttribute now support empty values ( #830 )
In previous versions, assigning an empty value to would be akin to assigning None : if the attribute was defined with null=True then it would be omitted, otherwise an error would be raised.
As of May 2020, DynamoDB supports empty values for String and Binary attributes. This release of PynamoDB starts treating empty values like any other values. If existing code unintentionally assigns empty values to StringAttribute or BinaryAttribute, this may be a breaking change: for example, the code may rely on the fact that in previous versions empty strings would be “read back” as None values when reloaded from the database.
UTCDateTimeAttribute now strictly requires the date string format '%Y-%m-%dT%H:%M:%S.%f%z' to ensure proper ordering. PynamoDB has always written values with this format but previously would accept reading other formats. Items written using other formats must be rewritten before upgrading.
Table backup functionality ( Model.dump[s] and Model.load[s] ) has been removed.
Model.query no longer converts unsupported range key conditions into filter conditions.
Internal attribute type constants are replaced with their “short” DynamoDB version ( #827 )
Remove ListAttribute.remove_indexes (added in v4.3.2) and document usage of remove for list elements ( #838 )
Remove pynamodb.connection.util.pythonic ( #753 ) and ( #865 )
Remove ModelContextManager class ( #861 )
Features:
Polymorphism
This release introduces Polymorphism support via DiscriminatorAttribute . Discriminator values are written to DynamoDB and used during deserialization to instantiate the desired class.
Model Serialization
The Model class now includes public methods for serializing and deserializing its attributes. Model.serialize and Model.deserialize convert the model to/from a dictionary of DynamoDB attribute values.
Other changes in this release:
Typed list attributes can now support any Attribute subclass ( #833 )
Most API operation methods now accept a settings argument to customize settings of individual operations. This currently allow adding or overriding HTTP headers. ( #887 )
Add the attribute name to error messages when deserialization fails ( #815 )
Add the table name to error messages for transactional operations ( #835 )
Contributors to this release:
@jpinner
@ikonst
@rchilaka -amzn
@jonathantan
This is a beta release for a major release with breaking changes.
This is a beta release for a major release with breaking changes.
Please read the release notes carefully and report any bugs encountered.
This is a beta release for a major release with breaking changes.
This is a beta release for a major release with breaking changes.
Please read the release notes carefully and report any bugs encountered.
This is a beta release for a major release with breaking changes.
This is a beta release for a major release with breaking changes.
Please read the release notes carefully and report any bugs encountered.
This is a beta release for a major release with breaking changes. Please read the release notes carefully and report any bugs encountered.
This is a beta release for a major release with breaking changes. Please read the release notes carefully and report any bugs encountered.
Remove botocore pin by @ikonst in #1133
Full Changelog: 4.4.0...4.4.1
Workaround for _convert_to_request_dict change (#1083) by @ikonst in https://github.com/pynamodb/PynamoDB/pull/1130
_convert_to_request_dict change (#1083) by @ikonst in https://github.com/pynamodb/PynamoDB/pull/1130Full Changelog: https://github.com/pynamodb/PynamoDB/compare/4.3.3...4.4.0
Update for botocore 1.28 private API change (#1130) which caused the following exception:
TypeError : _convert_to_request_dict () missing 1 required positional argument : 'endpoint_url'
This is a backwards compatible, minor release.
This is a backwards compatible, minor release.
Please read the release notes for a full list of changes.
Add type stubs for indexing into a ListAttribute for forming conditional expressions ( #774 )
class MyModel ( Model ): ... my_list = ListAttribute () MyModel . query ( ... , condition = MyModel . my_list [ 0 ] == 42 )
Fix a warning about collections.abc deprecation ( #782 )
This is a backwards compatible, minor release.
This is a backwards compatible, minor release.
Please read the release notes for a full list of changes.
Fix discrepancy between runtime and type-checker’s perspective of Index and derived types ( #769 )
Add ListAttribute.remove_indexes action for removing specific indexes from a ListAttribute ( #754 )
Type stub fixes:
Add missing parameters of Model.scan ( #750 )
Change Model.get ’s hash_key parameter to be typed Any ( #756 )
Prevent integration tests from being packaged ( #758 )
Various documentation fixes ( #762 , #765 , #766 )
Contributors to this release:
@mxr
@sodre
@biniow
@MartinAltmayer
@dotpmrcunha
@meawoppl
This is a backwards compatible, minor release.
This is a backwards compatible, minor release.
Please read the release notes for a full list of changes.
Fix Index.query and Index.scan typing regressions introduced in 4.2.0, which were causing false errors in type checkers
This is a backwards compatible, minor release.
This is a backwards compatible, minor release.
Please read the release notes for a full list of changes.
Implement exponential backoff for batch writes ( #728 )
Avoid passing ‘PROVISIONED’ BillingMode for compatibility with some AWS AZs ( #721 )
On Python >= 3.3, use importlib instead of deprecated imp ( #723 )
Update in-memory object correctly on REMOVE update expressions ( #741 )
Contributors to this release:
@hallie
@bit -bot-bit
@edholland
@reginalin
@MichelML
@timgates42
@sunaoka
@conjmurph
Implement exponential backoff for batch writes (728)
Avoid passing 'PROVISIONED' BillingMode for compatibility with some AWS AZs (721)
On Python >= 3.3, use importlib instead of deprecated imp (723)
Update in-memory object correctly on REMOVE update expressions (741)
Contributors to this release:
hallie
bit-bot-bit
edholland
reginalin
MichelML
timgates42
sunaoka
conjmurph
This is a backwards compatible, minor release.
This is a backwards compatible, minor release.
Please read the release notes for a full list of changes.
date 2019-10-17
This is a backwards compatible, minor release.
Add attributes_to_get parameter to Model.scan ( #431 )
Disable botocore parameter validation for performance ( #711 )
Contributors to this release:
@ButtaKnife
This is a backwards compatible, minor release.
This is a backwards compatible, minor release.
sts_client = boto3.client("sts")
role_object = sts_client.assume_role(RoleArn=role_arn, RoleSessionName="role_name", DurationSeconds=BOTO3_CLIENT_DURATION)
role_credentials = role_object["Credentials"]
class MyModel(Model):
class Meta:
table_name = "table_name"
aws_access_key_id = role_credentials["AccessKeyId"]
aws_secret_access_key = role_credentials["SecretAccessKey"]
aws_session_token = role_credentials["SessionToken"]
hash = UnicodeAttribute(hash_key=True)
range = UnicodeAttribute(range_key=True)
This is a major release with breaking changes.
This is a major release with breaking changes.
Please read the release notes carefully for a full list of changes.
date 2019-04-10
This is major release and contains breaking changes. Please read the notes below carefully.
Requests Removal
Given that botocore has moved to using urllib3 directly for making HTTP requests, we’ll be doing the same (via botocore ). This means the following:
The session_cls option is no longer supported.
The request_timeout_seconds parameter is no longer supported. connect_timeout_seconds and read_timeout_seconds are available instead.
Note that the timeouts for connection and read are now 15 and 30 seconds respectively. This represents a change from the previous 60 second combined requests timeout.
Wrapped exceptions (i.e exc.cause ) that were from requests.exceptions will now be comparable ones from botocore.exceptions instead.
Key attribute types must match table
The previous release would call DescribeTable to discover table metadata and would use the key types as defined in the DynamoDB table. This could obscure type mismatches e.g. where a table’s hash key is a number ( N ) in DynamoDB, but defined in PynamoDB as a UnicodeAttribute .
With this release, we’re always using the PynamoDB model’s definition of all attributes including the key attributes.
Deprecation of old APIs
Support for Legacy Conditional Parameters has been removed. See a complete list of affected Model methods below:
Method
Changes
update_item
removed in favor of update
rate_limited_scan
removed in favor of scan and ResultIterator
delete
conditional_operator and **expected_values kwargs removed. Use condition instead.
update
attributes , conditional_operator and **expected_values kwargs removed. Use actions and condition instead.
save
conditional_operator and **expected_values kwargs removed. Use condition instead.
count
**filters kwargs removed. Use range_key_condition / filter_condition instead.
query
conditional_operator and **filters kwargs removed. Use range_key_condition / filter_condition instead.
scan
conditional_operator and **filters kwargs removed. Use filter_condition instead.
allow_rate_limited_scan_without_consumed_capacity was removed
When upgrading, pay special attention to use of **filters and **expected_values , as you’ll need to check for arbitrary names that correspond to attribute names. Also keep an eye out for kwargs like user_id__eq=5 or email__null=True , which are no longer supported. A type check can help you catch cases like these.
New features in this release:
Support for transactions ( TransactGet and TransactWrite ) ( #618 )
Support for versioned optimistic locking ( #664 )
Other changes in this release:
Python 2.6 is no longer supported. 4.x.x will be the last major release to support Python 2.7 given the upcoming EOL.
Added the max_pool_connection and extra_headers settings to replace common use cases for session_cls
Added support for moto through implementing the botocore “before-send” hook.
Performance improvements to UTCDateTimeAttribute deserialization. ( #610 )
The MapAttributeMeta class has been removed. Now type(MapAttribute) == AttributeContainerMeta .
Removed LegacyBooleanAttribute and the read-compatibility for it in BooleanAttribute .
None can now be used to bootstrap condition chaining ( #653 )
Allow specifying timedeltas in expressions involving TTLAttributes ( #665 )
This is a beta release for a major release with breaking changes. Please read the release notes carefully and report any bugs encountered.
This is a beta release for a major release with breaking changes. Please read the release notes carefully and report any bugs encountered.
This is a beta release for a major release with breaking changes. Please read the release notes carefully and report any bugs encountered.
This is a beta release for a major release with breaking changes. Please read the release notes carefully and report any bugs encountered.
This is a beta release for a major release with breaking changes. Please read the release notes carefully and report any bugs encountered.
This is a beta release for a major release with breaking changes. Please read the release notes carefully and report any bugs encountered.
This is an alpha release for a major release with breaking changes. Please read the release notes carefully and report any bugs encountered.
This is an alpha release for a major release with breaking changes. Please read the release notes carefully and report any bugs encountered.
This is a backwards compatible, minor release.
date 2019-06-28
This is a backwards compatible, minor release.
Changes in this release:
Fix type stubs to include new methods and parameters introduced with time-to-live support
This is a backwards compatible minor release introducing TTL support.
This is a backwards compatible minor release introducing TTL support.
Check out the release notes for a full list of changes.
date 2019-06-13
This is a backwards compatible, minor release.
Changes in this release:
Adds a TTLAttribute that specifies when items expire ( #259 )
Enables time-to-live on a DynamoDB table if the corresponding model has a TTLAttribute
Adds a default_for_new parameter for Attribute which is a default that applies to new items only
Contributors to this release:
@irhkang
@ikonst
This is a backwards compatible, minor bug fix release.
This is a backwards compatible, minor bug fix release.
Check out the release notes for a full list of changes.
date 2019-01-15
This is a backwards compatible, minor release.
Fixes in this release:
Legacy boolean attribute migration fix. ( #538 )
Correctly package type stubs. ( #585 )
Contributors to this release:
@vo -va
This is a backwards compatible, minor bug fix release.
This is a backwards compatible, minor bug fix release.
Check out the release notes for a full list of changes.
date 2019-01-03
This is a backwards compatible, minor release.
Changes in this release:
Built-in support for mypy type stubs, superseding those in python/typeshed. ( #537 )
This is a backwards compatible, minor bug fix release.
This is a backwards compatible, minor bug fix release.
Check out the release notes for a full list of changes.
date 2018-08-30
This is a backwards compatible, minor bug fix release.
Fixes in this release:
Clearer error message on missing consumed capacity during rate-limited scan. ( #506 )
Python 3 compatibility in PageIterator. ( #535 )
Proxy configuration changes in botocore>=1.11.0. ( #531 )
Contributors to this release:
@ikonst
@zetaben
@ningirsu
This is a backwards compatible, major bug fix release.
This is a backwards compatible, major bug fix release.
Check out the release notes for a full list of changes.
date 2018-05-09
This is a backwards compatible, major bug fix release.
New features in this release:
Support scan operations on secondary indexes. ( #141 , #392 )
Support projections in model get function. ( #337 , #403 )
Handle values from keys when batch get returns unprocessed keys. ( #252 , #376 )
Externalizes AWS Credentials. ( #426 )
Add migration support for LegacyBooleanAttribute. ( #404 , #405 )
Rate limited Page Iterator. ( #481 )
Fixes in this release:
Thread-safe client creation in botocore. ( #153 , #393 )
Use attr.get_value(value) when deserialize. ( #450 )
Skip null attributes post serialization for maps. ( #455 )
Fix deserialization bug in BinaryAttribute and BinarySetAttribute. ( #459 , #480 )
Allow MapAttribute instances to be used as the RHS in expressions. ( #488 )
Return the correct last_evaluated_key for limited queries/scans. ( #406 , #410 )
Fix exclusive_start_key getting lost in PageIterator. ( #421 )
Add python 3.5 for Travis ci builds. ( #437 )
Contributors to this release:
@jpinner -lyft
@scode
@behos
@jmphilli
@drewisme
@nicysneiros
@jcomo
@kevgliss
@asottile
@harleyk
@betamoo
Removes experimental Throttle api.
date 2017-10-25
This is a backwards compatible, minor bug fix release.
Removed features in this release:
Remove experimental Throttle api. ( #378 )
Fixes in this release:
Handle attributes that cannot be retrieved by getattr. Fixes #104 ( #385 )
Model.refresh() should reset all model attribuets. Fixes #166 ( #388 )
Model.loads() should deserialize using custom attribute names. Fixes #168 ( #387 )
Deserialize hash key during table loads. Fixes #143 ( #386 )
Support pagination in high-level api query and scan methods. Fixes #50 , #118 , #207 , and #248 ( #379 )
Don’t serialize null nested attributed. Fixes #240 and #309 ( #375 )
Legacy update item subset removal using DELETE operator. Fixes #132 ( #374 )
Contributors to this release:
@jpinner -lyft
Add support for current version of the DynamoDB API.
MapAttribute item assignment and access.date 2017-10-13
This is a backwards compatible, minor release.
This release updates PynamoDB to interact with Dynamo via the current version of Dynamo’s API. Condition and update expressions can now be created from attributes and used in model operations. Legacy filter and attribute update keyword arguments have been deprecated. Using these arguments will cause a warning to be logged.
New features in this release:
Add support for current version of DynamoDB API
Improved MapAttribute item assignment and access.
Contributors to this release:
@jpinner -lyft
This is a backwards compatible, release candidate.
date 2017-10-09
This is a backwards compatible, release candidate.
This release candidate allows dereferencing raw MapAttributes in condition expressions. It also improves MapAttribute assignment and access.
Contributors to this release:
@jpinner -lyft
This release candidate updates PynamoDB to interact with Dynamo via the current version of Dynamo’s API. It deprecates some internal methods that were…
date 2017-09-22
This is a backwards compatible, release candidate.
This release candidate updates PynamoDB to interact with Dynamo via the current version of Dynamo’s API. It deprecates some internal methods that were used to interact with Dynamo that are no longer relevant. If your project was calling those low level methods a warning will be logged.
New features in this release:
Add support for current version of DynamoDB API
Contributors to this release:
@jpinner -lyft
This is a backwards compatible, minor release.
date 2017-07-07
This is a backwards compatible, minor release.
Note that we now require botocore>=1.2.0 ; this is required to support the consistent_read parameter when scanning.
Calling Model.count() without a hash_key and with filters will raise a ValueError , as it was previously returning incorrect results.
New features in this release:
Add support for signals via blinker ( #278 )
Fixes in this release:
Pass batch parameters down to boto/dynamo ( #308 )
Raise a ValueError if count() is invoked with no hash key AND filters ( #313 )
Add consistent_read parameter to Model.scan ( #311 )
Contributors to this release:
@jmphilli
@Lordnibbler
@lita
This is a major release with breaking changes.
date 2017-06-09
This is a major release with breaking changes.
MapAttribute now allows pythonic access when recursively defined. If you were not using the attr_name= kwarg then you should have no problems upgrading. Previously defined non subclassed MapAttributes (raw MapAttributes ) that were members of a subclassed MapAttribute (typed MapAttributes ) would have to be accessed like a dictionary. Now object access is possible and recommended. Access via the attr_name , also known as the DynamoDB name, will now throw an AttributeError .
UnicodeSetAttributes do not json serialize or deserialize anymore. We deprecated the functionality of json serializing as of 1.6.0 but left the deserialization functionality in there so people could migrate away from the old functionality. If you have any UnicodeSetAttributes that have not been persisted since version 1.6.0 you will need to migrate your data or manage the json encoding and decoding with a custom attribute in application.
Performance enhancements for the UTCDateTimeAttribute deserialize method. ( #277 )
There was a regression with attribute discovery. Fixes attribute discovery for model classes with inheritance ( #280 )
Fix to ignore null checks for batch delete ( #283 )
Fix for ListAttribute and MapAttribute serialize ( #286 )
Fix for MapAttribute pythonic access ( #292 ) This is a breaking change.
Deprecated the json decode in UnicodeSetAttribute ( #294 ) This is a breaking change.
Raise TableDoesNotExist error instead of letting json decoding ValueErrors raise ( #296 )
Contributors to this release:
@jcbertin
@johnliu
@scode
@rowilla
@lita
@garretheel
@jmphilli
Prepare users to upgrade to v3.0.1+ (see issue #377 for details).
Prepare users to upgrade to v3.0.1+ (see issue #377 for details).
date 2017-10-25
This is a backwards compatible, minor release.
The purpose of this release is to prepare users to upgrade to v3.0.1+ (see issue #377 for details).
Pull request #294 removes the backwards compatible deserialization of UnicodeSetAttributes introduced in #151 .
This release introduces a migration function on the Model class to help re-serialize any data that was written with v1.5.4 and below.
Temporary feature in this release:
Model.fix_unicode_set_attributes() migration helper
Model.needs_unicode_set_fix() migration helper
This is a backwards compatible, minor release.
date 2017-05-10
This is a backwards compatible, minor release.
Fixes in this release:
Replace Delorean with dateutil ( #208 )
Fix a bug with count – consume all pages in paginated response ( #256 )
Update mock lib ( #262 )
Use pytest instead of nose ( #263 )
Documentation changes ( #269 )
Fix null deserialization in MapAttributes ( #272 )
Contributors to this release:
@funkybob
@garrettheel
@lita
@jmphilli
This is a backwards compatible, minor release.
date 2017-03-16
This is a backwards compatible, minor release.
Fixes in this release:
Apply retry to ProvisionedThroughputExceeded ( #222 )
rate_limited_scan fix to handle consumed capacity ( #235 )
Fix for test when dict ordering differs ( #237 )
Contributors to this release:
@anandswaminathan
@jasonfriedland
@JohnEmhoff
This is a minor release, with some changes to MapAttribute handling. Previously, when accessing a MapAttribute via item.attr , the type of the object
date 2017-02-14
This is a minor release, with some changes to MapAttribute handling. Previously, when accessing a MapAttribute via item.attr , the type of the object used during instantiation would determine the return value. Model(attr={…}) would return a dict on access. Model(attr=MapAttribute(…)) would return an instance of MapAttribute . After #223 , a MapAttribute will always be returned during item access regardless of the type of the object used during instantiation. For convenience, a dict version can be accessed using .as_dict() on the MapAttribute .
New features in this release:
Support multiple attribute update ( #194 )
Rate-limited scan ( #205 )
Always create map attributes when setting a dict ( #223 )
Fixes in this release:
Remove AttributeDict and require explicit attr names ( #220 )
Add distinct DoesNotExist classes per model ( #206 )
Ensure defaults are respected for MapAttribute ( #221 )
Add docs for GSI throughput changes ( #224 )
Contributors to this release:
@anandswaminathan
@garrettheel
@ikonst
@jasonfriedland
@yedpodtrzitko
This is a backwards compatible, minor release.
date 2016-11-18
This is a backwards compatible, minor release.
Fixes in this release:
Allow longs as members of maps + lists in python 2 ( #200 )
Allow raw map attributes in subclassed map attributes ( #199 )
Contributors to this release:
@jmphilli
This is a backwards compatible, minor release.
date 2016-11-10
This is a backwards compatible, minor release.
Fixes in this release:
add BOOL into SHORT_ATTR_TYPES ( #190 )
deserialize map attributes correctly ( #192 )
prepare request with requests session so session properties are applied ( #197 )
Contributors to this release:
@anandswaminathan
@jmphilli
@yedpodtrzitko
This is a backwards compatible, minor release.
date 2016-11-04
This is a backwards compatible, minor release.
Fixes in this release:
make “unprocessed keys for batch operation” log at info level ( #180 )
fix RuntimeWarning during imp_load in custom settings file ( #185 )
allow unstructured map attributes ( #186 )
Contributors to this release:
@danielhochman
@jmphilli
@bedge
Your coding agent can read these notes before it upgrades. Set up the MCP server →