So my code above is just completely wrong.
This code actually does what one expects:
def recursive_expunge(obj, dbSession):
def _recursive_expunge(_obj):
_instance_state = sqlalchemy.inspection.inspect(_obj)
_mapper = _instance_state.mapper
try:
dbSession.expunge(_obj)
# print "expunge | %s" % _obj
except sqlalchemy.orm.exc.UnmappedInstanceError:
# print "sqlalchemy.orm.exc.UnmappedInstanceError | %s" %
_obj
pass
except sqlalchemy.exc.InvalidRequestError:
# print "sqlalchemy.exc.UnmappedInstanceError | %s" % _obj
pass
if _mapper:
# _unloaded = [(_name, _rel) for (_name, _rel) in
_mapper.relationships.items() if _name in _instance_state.unloaded]
_loaded_rels = [i for i in _mapper.relationships.items() if
i[0] not in _instance_state.unloaded]
for (_name, _rel) in _loaded_rels:
_loaded_rel_data = getattr(_obj, _name)
if _loaded_rel_data:
if not _rel.uselist:
_recursive_expunge(_loaded_rel_data)
else:
for _i in _loaded_rel_data:
_recursive_expunge(_i)
_recursive_expunge(obj)
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.