Changelog

1.0.0 (2024-01-30)

  • Remove __version__ attribute. Use feature detection or importlib.metadata.version("marshmallow-sqlalchemy") instead (#568).

  • Support marshmallow>=3.10.0 (#566).

  • Passing info={"marshmallow": ...} to SQLAlchemy columns is removed, as it is redundant with the auto_field functionality (#567).

  • Remove packaging as a dependency (#566).

  • Support Python 3.12.

0.30.0 (2024-01-07)

Features:

  • Use Session.get() load instances to improve deserialization performance (#548). Thanks @zippolyte for the PR.

Other changes:

  • Drop support for Python 3.7, which is EOL (#540).

0.29.0 (2023-02-27)

Features:

  • Support SQLAlchemy 2.0 (#494). Thanks @dependabot for the PR.

  • Enable (in tests) and fix SQLAlchemy 2.0 compatibility warnings (#493).

Bug fixes:

  • Use mapper .attrs rather than .get_property and .iterate_properties to ensure registry.configure is called (call removed in SQLAlchemy 2.0.2) (#487). Thanks @ddoyon92 for the PR.

Other changes:

  • Drop support for SQLAlchemy 1.3, which is EOL (#493).

0.28.2 (2023-02-23)

Bug fixes:

  • Use .scalar_subquery() for SQLAlchemy>1.4 to suppress a warning (#459). Thanks @indiVar0508 for the PR.

Other changes:

  • Lock SQLAlchemy<2.0 in setup.py. SQLAlchemy 2.x is not supported (#486).

  • Test against Python 3.11 (#486).

0.28.1 (2022-07-18)

Bug fixes:

  • Address DeprecationWarning re: usage of distutils (#435).

Thanks @Tenzer for the PR.

0.28.0 (2022-03-09)

Features:

  • Add support for generating fields from column_property (#97). Thanks @mrname for the PR.

Other changes:

  • Drop support for Python 3.6, which is EOL.

  • Drop support for SQLAlchemy 1.2, which is EOL.

0.27.0 (2021-12-18)

Features:

Other changes:

  • Test against Python 3.10 (#421).

0.26.1 (2021-06-05)

Bug fixes:

  • Fix generating fields for postgreql.ARRAY columns (#392).

Thanks @mjpieters for the catch and patch.

0.26.0 (2021-05-26)

Bug fixes:

  • Unwrap proxied columns to handle models for subqueries (#383). Thanks @mjpieters for the catch and patch

  • Fix setting transient on a per-instance basis when the transient Meta option is set (#388). Thanks again @mjpieters.

Other changes:

  • Backwards-incompatible: Remove deprecated ModelSchema and TableSchema classes.

0.25.0 (2021-05-02)

  • Add load_instance as a parameter to SQLAlchemySchema and SQLAlchemyAutoSchema (#380). Thanks @mjpieters for the PR.

0.24.3 (2021-04-26)

  • Fix deprecation warnings from marshmallow 3.10 and SQLAlchemy 1.4 (#369). Thanks @peterschutt for the PR.

0.24.2 (2021-02-07)

  • auto_field supports association_proxy fields with local multiplicity (uselist=True) (#364). Thanks @Unix-Code for the catch and patch.

0.24.1 (2020-11-20)

0.24.0 (2020-10-20)

  • Backwards-incompatible: Drop support for marshmallow 2.x, which is now EOL.

  • Test against Python 3.9.

0.23.1 (2020-05-30)

Bug fixes:

  • Don’t add no-op Length validator (#315). Thanks @taion for the PR.

0.23.0 (2020-04-26)

Bug fixes:

  • Fix data keys when using Related with a Column that is named differently from its attribute (#299). Thanks @peterschutt for the catch and patch.

  • Fix bug that raised an exception when using the ordered = True option on a schema that has an auto_field (#306). Thanks @KwonL for reporting and thanks @peterschutt for the PR.

0.22.3 (2020-03-01)

Bug fixes:

  • Fix DeprecationWarning getting raised even when user code does not use TableSchema or ModelSchema (#289). Thanks @5uper5hoot for reporting.

0.22.2 (2020-02-09)

Bug fixes:

  • Avoid error when using SQLAlchemyAutoSchema, ModelSchema, or fields_for_model with a model that has a SynonymProperty (#190). Thanks @TrilceAC for reporting.

  • auto_field and field_for work with SynonymProperty (#280).

Other changes:

  • Add hook in ModelConverter for changing field names based on SQLA columns and properties (#276). Thanks @davenquinn for the suggestion and the PR.

0.22.1 (2020-02-09)

Bug fixes:

  • Fix behavior when passing table to auto_field (#277).

0.22.0 (2020-02-09)

Features:

  • Add SQLAlchemySchema and SQLAlchemyAutoSchema, which have an improved API for generating marshmallow fields and overriding their arguments via auto_field (#240). Thanks @taion for the idea and original implementation.

# Before
from marshmallow_sqlalchemy import ModelSchema, field_for

from . import models


class ArtistSchema(ModelSchema):
    class Meta:
        model = models.Artist

    id = field_for(models.Artist, "id", dump_only=True)
    created_at = field_for(models.Artist, "created_at", dump_only=True)


# After
from marshmallow_sqlalchemy import SQLAlchemySchema, auto_field

from . import models


class ArtistSchema(SQLAlchemyAutoSchema):
    class Meta:
        model = models.Artist

    id = auto_field(dump_only=True)
    created_at = auto_field(dump_only=True)
  • Add load_instance option to configure deserialization to model instances (#193, #270).

  • Add include_relationships option to configure generation of marshmallow fields for relationship properties (#98). Thanks @dusktreader for the suggestion.

Deprecations:

  • ModelSchema and TableSchema are deprecated, since SQLAlchemyAutoSchema has equivalent functionality.

# Before
from marshmallow_sqlalchemy import ModelSchema, TableSchema

from . import models


class ArtistSchema(ModelSchema):
    class Meta:
        model = models.Artist


class AlbumSchema(TableSchema):
    class Meta:
        table = models.Album.__table__


# After
from marshmallow_sqlalchemy import SQLAlchemyAutoSchema

from . import models


class ArtistSchema(SQLAlchemyAutoSchema):
    class Meta:
        model = models.Artist
        include_relationships = True
        load_instance = True


class AlbumSchema(SQLAlchemyAutoSchema):
    class Meta:
        table = models.Album.__table__
  • Passing info={"marshmallow": ...} to SQLAlchemy columns is deprecated, as it is redundant with the auto_field functionality.

Other changes:

  • Backwards-incompatible: fields_for_model does not include relationships by default. Use fields_for_model(..., include_relationships=True) to preserve the old behavior.

0.21.0 (2019-12-04)

  • Add support for postgresql.OID type (#262). Thanks @petrus-v for the PR.

  • Remove imprecise Python 3 classifier from PyPI metadata (#255). Thanks @ecederstrand.

0.20.0 (2019-12-01)

  • Add support for mysql.DATETIME and mysql.INTEGER type (#204).

  • Add support for postgresql.CIDR type (#183).

  • Add support for postgresql.DATE and postgresql.TIME type.

Thanks @evelyn9191 for the PR.

0.19.0 (2019-09-05)

  • Drop support for Python 2.7 and 3.5 (#241).

  • Drop support for marshmallow<2.15.2.

  • Only support sqlalchemy>=1.2.0.

0.18.0 (2019-09-05)

Features:

  • marshmallow_sqlalchemy.fields.Nested propagates the value of transient on the call to load (#177, #206). Thanks @leonidumanskiy for reporting.

Note: This is the last release to support Python 2.7 and 3.5.

0.17.2 (2019-08-31)

Bug fixes:

  • Fix error handling when passing an invalid type to Related (#223). Thanks @heckad for reporting.

  • Address DeprecationWarning raised when using Related with marshmallow 3 (#243).

0.17.1 (2019-08-31)

Bug fixes:

  • Add marshmallow_sqlalchemy.fields.Nested field that inherits its session from its schema. This fixes a bug where an exception was raised when using Nested within a ModelSchema (#67). Thanks @nickw444 for reporting and thanks @samueljsb for the PR.

User code should be updated to use marshmallow-sqlalchemy’s Nested instead of marshmallow.fields.Nested.

# Before
from marshmallow import fields
from marshmallow_sqlalchemy import ModelSchema


class ArtistSchema(ModelSchema):
    class Meta:
        model = models.Artist


class AlbumSchema(ModelSchema):
    class Meta:
        model = models.Album

    artist = fields.Nested(ArtistSchema)


# After
from marshmallow import fields
from marshmallow_sqlalchemy import ModelSchema
from marshmallow_sqlalchemy.fields import Nested


class ArtistSchema(ModelSchema):
    class Meta:
        model = models.Artist


class AlbumSchema(ModelSchema):
    class Meta:
        model = models.Album

    artist = Nested(ArtistSchema)

0.17.0 (2019-06-22)

Features:

  • Add support for postgresql.MONEY type (#218). Thanks @heckad for the PR.

0.16.4 (2019-06-15)

Bug fixes:

  • Compatibility with marshmallow 3.0.0rc7. Thanks @heckad for the catch and patch.

0.16.3 (2019-05-05)

Bug fixes:

  • Compatibility with marshmallow 3.0.0rc6.

0.16.2 (2019-04-10)

Bug fixes:

  • Prevent ValueError when using the exclude class Meta option with TableSchema (#202).

0.16.1 (2019-03-11)

Bug fixes:

  • Fix compatibility with SQLAlchemy 1.3 (#185).

0.16.0 (2019-02-03)

Features:

  • Add support for deserializing transient objects (#62). Thanks @jacksmith15 for the PR.

0.15.0 (2018-11-05)

Features:

  • Add ModelConverter._should_exclude_field hook (#139). Thanks @jeanphix for the PR.

  • Allow field kwargs to be overriden by passing info['marshmallow'] to column properties (#21). Thanks @dpwrussell for the suggestion and PR. Thanks @jeanphix for the final implementation.

0.14.2 (2018-11-03)

Bug fixes:

  • Fix behavior of Related field (#150). Thanks @zezic for reporting and thanks @AbdealiJK for the PR.

  • Related now works with AssociationProxy fields (#151). Thanks @AbdealiJK for the catch and patch.

Other changes:

  • Test against Python 3.7.

  • Bring development environment in line with marshmallow.

0.14.1 (2018-07-19)

Bug fixes:

  • Fix behavior of exclude with marshmallow 3.0 (#131). Thanks @yaheath for reporting and thanks @deckar01 for the fix.

0.14.0 (2018-05-28)

Features:

  • Make ModelSchema.session a property, which allows session to be retrieved from context (#129). Thanks @gtxm.

Other changes:

  • Drop official support for Python 3.4. Python>=3.5 and Python 2.7 are supported.

0.13.2 (2017-10-23)

Bug fixes:

  • Unset instance attribute when an error occurs during a load call (#114). Thanks @vgavro for the catch and patch.

0.13.1 (2017-04-06)

Bug fixes:

  • Prevent unnecessary queries when using the fields.Related (#106). Thanks @xarg for reporting and thanks @jmuhlich for the PR.

0.13.0 (2017-03-12)

Features:

  • Invalid inputs for compound primary keys raise a ValidationError when deserializing a scalar value (#103). Thanks @YuriHeupa for the PR.

Bug fixes:

  • Fix compatibility with marshmallow>=3.x.

0.12.1 (2017-01-05)

Bug fixes:

  • Reset ModelSchema.instance after each load call, allowing schema instances to be reused (#78). Thanks @georgexsh for reporting.

Other changes:

  • Test against Python 3.6.

0.12.0 (2016-10-08)

Features:

  • Add support for TypeDecorator-based types (#83). Thanks @frol.

Bug fixes:

  • Fix bug that caused a validation errors for custom column types that have the python_type of uuid.UUID (#54). Thanks @wkevina and thanks @kelvinhammond for the fix.

Other changes:

  • Drop official support for Python 3.3. Python>=3.4 and Python 2.7 are supported.

0.11.0 (2016-10-01)

Features:

  • Allow overriding field class returned by field_for by adding the field_class param (#81). Thanks @cancan101.

0.10.0 (2016-08-14)

Features:

  • Support for SQLAlchemy JSON type (in SQLAlchemy>=1.1) (#74). Thanks @ewittle for the PR.

0.9.0 (2016-07-02)

Features:

  • Enable deserialization of many-to-one nested objects that do not exist in the database (#69). Thanks @seanharr11 for the PR.

Bug fixes:

  • Depend on SQLAlchemy>=0.9.7, since marshmallow-sqlalchemy uses sqlalchemy.dialects.postgresql.JSONB (#65). Thanks @alejom99 for reporting.

0.8.1 (2016-02-21)

Bug fixes:

  • ModelSchema and TableSchema respect field order if the ordered=True class Meta option is set (#52). Thanks @jeffwidman for reporting and @jmcarp for the patch.

  • Declared fields are not introspected in order to support, e.g. column_property (#57). Thanks @jmcarp.

0.8.0 (2015-12-28)

Features:

  • ModelSchema and TableSchema will respect the TYPE_MAPPING class variable of Schema subclasses when converting Columns to Fields (#42). Thanks @dwieeb for the suggestion.

0.7.1 (2015-12-13)

Bug fixes:

  • Don’t make marshmallow fields required for non-nullable columns if a column has a default value or autoincrements (#47). Thanks @jmcarp for the fix. Thanks @AdrielVelazquez for reporting.

0.7.0 (2015-12-07)

Features:

  • Add include_fk class Meta option (#36). Thanks @jmcarp.

  • Non-nullable columns will generated required marshmallow Fields (#40). Thanks @jmcarp.

  • Improve support for MySQL BIT field (#41). Thanks @rudaporto.

  • Backwards-incompatible: Remove fields.get_primary_columns in favor of fields.get_primary_keys.

  • Backwards-incompatible: Remove Related.related_columns in favor of fields.related_keys.

Bug fixes:

  • Fix serializing relationships when using non-default column names (#44). Thanks @jmcarp for the fix. Thanks @repole for the bug report.

0.6.0 (2015-09-29)

Features:

  • Support for compound primary keys. Thanks @jmcarp.

Other changes:

  • Supports marshmallow>=2.0.0.

0.5.0 (2015-09-27)

  • Add instance argument to ModelSchema constructor and ModelSchema.load which allows for updating existing DB rows (#26). Thanks @sssilver for reporting and @jmcarp for the patch.

  • Don’t autogenerate fields that are in Meta.exclude (#27). Thanks @jmcarp.

  • Raise ModelConversionError if converting properties whose column don’t define a python_type. Thanks @jmcarp.

  • Backwards-incompatible: ModelSchema.make_object is removed in favor of decorated make_instance method for compatibility with marshmallow>=2.0.0rc2.

0.4.1 (2015-09-13)

Bug fixes:

  • Now compatible with marshmallow>=2.0.0rc1.

  • Correctly pass keyword arguments from field_for to generated List fields (#25). Thanks @sssilver for reporting.

0.4.0 (2015-09-03)

Features:

  • Add TableSchema for generating Schemas from tables (#4). Thanks @jmcarp.

Bug fixes:

  • Allow session to be passed to ModelSchema.validate, since it requires it. Thanks @dpwrussell.

  • When serializing, don’t skip overriden fields that are part of a polymorphic hierarchy (#18). Thanks again @dpwrussell.

Support:

  • Docs: Add new recipe for automatic generation of schemas. Thanks @dpwrussell.

0.3.0 (2015-08-27)

Features:

  • Backwards-incompatible: Relationships are (de)serialized by a new, more efficient Related column (#7). Thanks @jmcarp.

  • Improve support for MySQL types (#1). Thanks @rmackinnon.

  • Improve support for Postgres ARRAY types (#6). Thanks @jmcarp.

  • ModelSchema no longer requires the sqla_session class Meta option. A Session can be passed to the constructor or to the ModelSchema.load method (#11). Thanks @dtheodor for the suggestion.

Bug fixes:

  • Null foreign keys are serialized correctly as None (#8). Thanks @mitchej123.

  • Properly handle a relationship specifies uselist=False (#17). Thanks @dpwrussell.

0.2.0 (2015-05-03)

Features:

  • Add field_for function for generating marshmallow Fields from SQLAlchemy mapped class properties.

Support:

  • Docs: Add “Overriding generated fields” section to “Recipes”.

0.1.1 (2015-05-02)

Bug fixes:

  • Fix keygetter class Meta option.

0.1.0 (2015-04-28)

  • First release.