Fixed regression caused by :ticket:`8133` where the pickle format for
mutable attributes was changed, without a fallback to recognize the old
format, causing in-place upgrades of SQLAlchemy to no longer be able to
read pickled data from previous versions. A check plus a fallback for the
old format is now in place.
Fixes: #8133
Change-Id: I9029729b4bc56c8b3145797869229eeff48a3b3b
--- /dev/null
+.. change::
+ :tags: bug, orm, regression
+ :tickets: 8133
+
+ Fixed regression caused by :ticket:`8133` where the pickle format for
+ mutable attributes was changed, without a fallback to recognize the old
+ format, causing in-place upgrades of SQLAlchemy to no longer be able to
+ read pickled data from previous versions. A check plus a fallback for the
+ old format is now in place.
def unpickle(state, state_dict):
if "ext.mutable.values" in state_dict:
- for val in state_dict["ext.mutable.values"][key]:
- val._parents[state] = key
+ collection = state_dict["ext.mutable.values"]
+ if isinstance(collection, list):
+ # legacy format
+ for val in collection:
+ val._parents[state] = key
+ else:
+ for val in state_dict["ext.mutable.values"][key]:
+ val._parents[state] = key
event.listen(parent_cls, "load", load, raw=True, propagate=True)
event.listen(