On 7/16/15 2:28 PM, Tom Flannaghan wrote:
Thanks for your reply.Our exact problem is that we are creating empty
detached objects from the primary key alone, and then merging them in
to a session, so we can't do this:
On Thursday, 16 July 2015 18:44:26 UTC+1, Michael Bayer wrote:
For now, I'd recommend either not using expire() or specifying
specific attribute names to expire().
I just included the expire() in the example as it was a more succinct
way to reproduce the same bug.
Our code looks more like this:
detached_port = Port(name='test')
make_transient_to_detached(detached_port)
new_port = session.merge(detached_port, load=False)
...
In my example, Port only has two columns so this won't demonstrate the
bug as the only non-deferred column is filled in already, but more
complicated objects that are merged in this way will not defer
columns. Do you think there a work around in this case?
try this recipe which should reset the expired state of the target
attributes individually:
from sqlalchemy.orm import attributes
def merge_load_false(session, obj):
obj = session.merge(obj, load=False)
obj_state = attributes.instance_state(obj)
obj_dict = obj_state.dict
deferred_keys = [
attr.key for attr in obj_state.mapper.column_attrs if
attr.deferred]
for k in deferred_keys:
if k not in obj_dict:
obj_state._reset(obj_dict, k)
return obj
a1 = merge_load_false(s, a1)
Thanks,
Tom
--
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]
<mailto:[email protected]>.
To post to this group, send email to [email protected]
<mailto:[email protected]>.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.
--
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.