- Remove
__version__
attribute. Use feature detection orimportlib.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.
Features:
- Use
Session.get()
load instances to improve deserialization performance (548
). Thankszippolyte
for the PR.
Other changes:
- Drop support for Python 3.7, which is EOL (
540
).
Features:
- Support SQLAlchemy 2.0 (
494
). Thanksdependabot
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 ensureregistry.configure
is called (call removed in SQLAlchemy 2.0.2) (487
). Thanksddoyon92
for the PR.
Other changes:
- Drop support for SQLAlchemy 1.3, which is EOL (
493
).
Bug fixes:
- Use .scalar_subquery() for SQLAlchemy>1.4 to suppress a warning (
459
). ThanksindiVar0508
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
).
Bug fixes:
- * Address
DeprecationWarning
re: usage ofdistutils
(435
). Thanks
Tenzer
for the PR.
Features:
- Add support for generating fields from column_property (
97
). Thanksmrname
for the PR.
Other changes:
- Drop support for Python 3.6, which is EOL.
- Drop support for SQLAlchemy 1.2, which is EOL.
Features:
- Distribute type information per PEP 561 (
420
). Thanksbruceadams
for the PR.
Other changes:
- Test against Python 3.10 (
421
).
Bug fixes:
- * Fix generating fields for
postgreql.ARRAY
columns (392
). Thanks
mjpieters
for the catch and patch.
Bug fixes:
- Unwrap proxied columns to handle models for subqueries (
383
). Thanksmjpieters
for the catch and patch - Fix setting
transient
on a per-instance basis when thetransient
Meta option is set (388
). Thanks againmjpieters
.
Other changes:
- Backwards-incompatible: Remove deprecated
ModelSchema
andTableSchema
classes.
- Add
load_instance
as a parameter to SQLAlchemySchema and SQLAlchemyAutoSchema (380
). Thanksmjpieters
for the PR.
- Fix deprecation warnings from marshmallow 3.10 and SQLAlchemy 1.4 (
369
). Thankspeterschutt
for the PR.
auto_field
supportsassociation_proxy
fields with local multiplicity (uselist=True
) (364
). ThanksUnix-Code
for the catch and patch.
auto_field
works withassociation_proxy
(338
). ThanksAbdealiJK
.
- Backwards-incompatible: Drop support for marshmallow 2.x, which is now EOL.
- Test against Python 3.9.
Bug fixes:
- Don't add no-op Length validator (
315
). Thankstaion
for the PR.
Bug fixes:
- Fix data keys when using
Related
with aColumn
that is named differently from its attribute (299
). Thankspeterschutt
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
). ThanksKwonL
for reporting and thankspeterschutt
for the PR.
Bug fixes:
- Fix
DeprecationWarning
getting raised even when user code does not useTableSchema
orModelSchema
(289
). Thanks5uper5hoot
for reporting.
Bug fixes:
- Avoid error when using
SQLAlchemyAutoSchema
,ModelSchema
, orfields_for_model
with a model that has aSynonymProperty
(190
). ThanksTrilceAC
for reporting. auto_field
andfield_for
work withSynonymProperty
(280
).
Other changes:
- Add hook in
ModelConverter
for changing field names based on SQLA columns and properties (276
). Thanksdavenquinn
for the suggestion and the PR.
Bug fixes:
- Fix behavior when passing
table
toauto_field
(277
).
Features:
- Add
SQLAlchemySchema
andSQLAlchemyAutoSchema
, which have an improved API for generating marshmallow fields and overriding their arguments viaauto_field
(240
). Thankstaion
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
). Thanksdusktreader
for the suggestion.
Deprecations:
ModelSchema
andTableSchema
are deprecated, sinceSQLAlchemyAutoSchema
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. Usefields_for_model(..., include_relationships=True)
to preserve the old behavior.
- Add support for
postgresql.OID
type (262
). Thankspetrus-v
for the PR. - Remove imprecise Python 3 classifier from PyPI metadata (
255
). Thanksecederstrand
.
- Add support for
mysql.DATETIME
andmysql.INTEGER
type (204
). - Add support for
postgresql.CIDR
type (183
). - Add support for
postgresql.DATE
andpostgresql.TIME
type.
Thanks evelyn9191
for the PR.
- Drop support for Python 2.7 and 3.5 (
241
). - Drop support for marshmallow<2.15.2.
- Only support sqlalchemy>=1.2.0.
Features:
marshmallow_sqlalchemy.fields.Nested
propagates the value oftransient
on the call toload
(177
,206
). Thanksleonidumanskiy
for reporting.
Note: This is the last release to support Python 2.7 and 3.5.
Bug fixes:
- Fix error handling when passing an invalid type to
Related
(223
). Thanksheckad
for reporting. - Address
DeprecationWarning
raised when usingRelated
with marshmallow 3 (243
).
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 usingNested
within aModelSchema
(67
). Thanksnickw444
for reporting and thankssamueljsb
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)
Features:
- Add support for
postgresql.MONEY
type (218
). Thanksheckad
for the PR.
Bug fixes:
- Compatibility with marshmallow 3.0.0rc7. Thanks
heckad
for the catch and patch.
Bug fixes:
- Compatibility with marshmallow 3.0.0rc6.
Bug fixes:
- Prevent ValueError when using the
exclude
class Meta option withTableSchema
(202
).
Bug fixes:
- Fix compatibility with SQLAlchemy 1.3 (
185
).
Features:
- Add support for deserializing transient objects (
62
). Thanksjacksmith15
for the PR.
Features:
- Add
ModelConverter._should_exclude_field
hook (139
). Thanksjeanphix
for the PR. - Allow field
kwargs
to be overriden by passinginfo['marshmallow']
to column properties (21
). Thanksdpwrussell
for the suggestion and PR. Thanksjeanphix
for the final implementation.
Bug fixes:
- Fix behavior of
Related
field (150
). Thankszezic
for reporting and thanksAbdealiJK
for the PR. Related
now works withAssociationProxy
fields (151
). ThanksAbdealiJK
for the catch and patch.
Other changes:
- Test against Python 3.7.
- Bring development environment in line with marshmallow.
Bug fixes:
- Fix behavior of
exclude
with marshmallow 3.0 (131
). Thanksyaheath
for reporting and thanksdeckar01
for the fix.
Features:
- Make
ModelSchema.session
a property, which allows session to be retrieved fromcontext
(129
). Thanksgtxm
.
Other changes:
- Drop official support for Python 3.4. Python>=3.5 and Python 2.7 are supported.
Bug fixes:
- Unset
instance
attribute when an error occurs during aload
call (114
). Thanksvgavro
for the catch and patch.
Bug fixes:
- Prevent unnecessary queries when using the fields.Related (
106
). Thanksxarg
for reporting and thanksjmuhlich
for the PR.
Features:
- Invalid inputs for compound primary keys raise a
ValidationError
when deserializing a scalar value (103
). ThanksYuriHeupa
for the PR.
Bug fixes:
- Fix compatibility with marshmallow>=3.x.
Bug fixes:
- Reset
ModelSchema.instance
after eachload
call, allowing schema instances to be reused (78
). Thanksgeorgexsh
for reporting.
Other changes:
- Test against Python 3.6.
Features:
- Add support for TypeDecorator-based types (
83
). Thanksfrol
.
Bug fixes:
- Fix bug that caused a validation errors for custom column types that have the
python_type
ofuuid.UUID
(54
). Thankswkevina
and thankskelvinhammond
for the fix.
Other changes:
- Drop official support for Python 3.3. Python>=3.4 and Python 2.7 are supported.
Features:
- Allow overriding field class returned by
field_for
by adding thefield_class
param (81
). Thankscancan101
.
Features:
- Support for SQLAlchemy JSON type (in SQLAlchemy>=1.1) (
74
). Thanksewittle
for the PR.
Features:
- Enable deserialization of many-to-one nested objects that do not exist in the database (
69
). Thanksseanharr11
for the PR.
Bug fixes:
- Depend on SQLAlchemy>=0.9.7, since marshmallow-sqlalchemy uses
sqlalchemy.dialects.postgresql.JSONB
(65
). Thanksalejom99
for reporting.
Bug fixes:
ModelSchema
andTableSchema
respect field order if theordered=True
class Meta option is set (52
). Thanksjeffwidman
for reporting andjmcarp
for the patch.- Declared fields are not introspected in order to support, e.g.
column_property
(57
). Thanksjmcarp
.
Features:
ModelSchema
andTableSchema
will respect theTYPE_MAPPING
class variable of Schema subclasses when convertingColumns
toFields
(42
). Thanksdwieeb
for the suggestion.
Bug fixes:
- Don't make marshmallow fields required for non-nullable columns if a column has a default value or autoincrements (
47
). Thanksjmcarp
for the fix. ThanksAdrielVelazquez
for reporting.
Features:
- Add
include_fk
class Meta option (36
). Thanksjmcarp
. - Non-nullable columns will generated required marshmallow Fields (
40
). Thanksjmcarp
. - Improve support for MySQL BIT field (
41
). Thanksrudaporto
. - Backwards-incompatible: Remove
fields.get_primary_columns
in favor offields.get_primary_keys
. - Backwards-incompatible: Remove
Related.related_columns
in favor offields.related_keys
.
Bug fixes:
- Fix serializing relationships when using non-default column names (
44
). Thanksjmcarp
for the fix. Thanksrepole
for the bug report.
Features:
- Support for compound primary keys. Thanks
jmcarp
.
Other changes:
- Supports marshmallow>=2.0.0.
- Add
instance
argument toModelSchema
constructor andModelSchema.load
which allows for updating existing DB rows (26
). Thankssssilver
for reporting andjmcarp
for the patch. - Don't autogenerate fields that are in
Meta.exclude
(27
). Thanksjmcarp
. - Raise
ModelConversionError
if converting properties whose column don't define apython_type
. Thanksjmcarp
. - Backwards-incompatible:
ModelSchema.make_object
is removed in favor of decoratedmake_instance
method for compatibility with marshmallow>=2.0.0rc2.
Bug fixes:
- Now compatible with marshmallow>=2.0.0rc1.
- Correctly pass keyword arguments from
field_for
to generatedList
fields (25
). Thankssssilver
for reporting.
Features:
- Add
TableSchema
for generatingSchemas
from tables (4
). Thanksjmcarp
.
Bug fixes:
- Allow
session
to be passed toModelSchema.validate
, since it requires it. Thanksdpwrussell
. - When serializing, don't skip overriden fields that are part of a polymorphic hierarchy (
18
). Thanks againdpwrussell
.
Support:
- Docs: Add new recipe for automatic generation of schemas. Thanks
dpwrussell
.
Features:
- Backwards-incompatible: Relationships are (de)serialized by a new, more efficient
Related
column (7
). Thanksjmcarp
. - Improve support for MySQL types (
1
). Thanksrmackinnon
. - Improve support for Postgres ARRAY types (
6
). Thanksjmcarp
. ModelSchema
no longer requires thesqla_session
class Meta option. ASession
can be passed to the constructor or to theModelSchema.load
method (11
). Thanksdtheodor
for the suggestion.
Bug fixes:
- Null foreign keys are serialized correctly as
None
(8
). Thanksmitchej123
. - Properly handle a relationship specifies
uselist=False
(#17
). Thanksdpwrussell
.
Features:
- Add
field_for
function for generating marshmallow Fields from SQLAlchemy mapped class properties.
Support:
- Docs: Add "Overriding generated fields" section to "Recipes".
Bug fixes:
- Fix
keygetter
class Meta option.
- First release.