Re: [Sqlalchemy-tickets] [sqlalchemy] #2501: the DELETE before INSERT problem
Brought to you by:
zzzeek
|
From: sqlalchemy <mi...@zz...> - 2013-10-25 09:43:01
|
#2501: the DELETE before INSERT problem
------------------------------+---------------------------------------
Reporter: zzzeek | Owner: zzzeek
Type: defect | Status: new
Priority: high | Milestone: 0.9.xx
Component: orm | Severity: very major - up to 2 days
Resolution: | Keywords:
Progress State: needs tests |
------------------------------+---------------------------------------
Comment (by schlamar):
Looks like resetting all order_by properties of revived objects does the
trick:
{{{
#!python
def get_order_by_properties(model, relation_name):
relation = getattr(model, relation_name)
if (hasattr(relation, 'property') and
isinstance(relation.property, RelationshipProperty)):
if relation.property.order_by:
return [c.name for c in relation.property.order_by]
return list()
value = [get_related_obj(session, obj, v, field) for v in value]
setattr(obj, field, list())
session.flush() # possibly trigger delete cascade
for v in value:
state = inspection.inspect(v)
if state.deleted:
orm.make_transient(v) # put it back to life
# reset order by fields
for attr in get_order_by_properties(type(obj), field):
if hasattr(v, attr):
setattr(v, attr, None)
}}}
--
Ticket URL: <http://www.sqlalchemy.org/trac/ticket/2501#comment:14>
sqlalchemy <http://www.sqlalchemy.org/>
The Database Toolkit for Python
|