On Jul 27, 2011, at 5:52 AM, King Simon-NFHD78 wrote:

>> -----Original Message-----
>> From: [email protected] [mailto:[email protected]]
>> On Behalf Of Gunnlaugur Briem
>> Sent: 27 July 2011 10:36
>> To: [email protected]
>> Subject: Re: RE: [sqlalchemy] Updating records in table not working
>> 
>> On Wednesday, 27 July 2011 08:23:14 UTC, Simon King wrote:
>> 
>>      > I've looked at the SA documentation and as far as I can see
>> the 'add'
>>      > does an insert or an update.
>> 
>>      I think this is incorrect - 'add' always corresponds to
>> 'INSERT'
>> 
>> Only for brand new instances, not associated with a session. For
>> *detached* instances the identity is known and the instances will be
>> in session but not in session.new, so an UPDATE will be issued.
>> 
>> Regards,
>> 
>> - Gulli
>> 
> 
> Ah, I see. Thanks for the clarification.

Whether the object has a "key" or not is what decides between it being 
"transient->pending" or "detached->persistent" once add()-ed back to the 
session:

        from sqlalchemy.orm import attributes

        attributes.instance_state(myobject).key is not None

where instance_state() is going to give you the "._sa_instance_state" attribute 
we stick on there, but we keep access through the public function.

The ".key" is stuck on the object after it gets through a flush(), or when we 
construct it from an incoming row.   Otherwise there is not a ".key" and the 
object is transient->pending.

We originally had save() and update() because we copied Hibernate's scheme 
exactly, as well as save_or_update() which in Hibernate's case does a "guess".  
 In SQLAlchemy we have it much easier due to Python's open ended nature, we 
just check if we put a "key" or not.    So we just made it add() to simplify.

> 
> Cheers,
> 
> Simon
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/sqlalchemy?hl=en.
> 

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to