On Feb 21, 2010, at 2:03 PM, Michael Bayer wrote:

> 
> On Feb 21, 2010, at 1:51 PM, Michael Bayer wrote:
> 
>> 
>> On Feb 20, 2010, at 5:12 PM, Kent wrote:
>> 
>>> If I have a persistent instance in my session and I call merge on an
>>> object that equates to that instance, some attributes (it seems those
>>> that aren't explicitly set on the merging instance) are expired and
>>> get re-queried the next time they are referenced.
>> 
>> 
>> 
>>> 
>>> We will be supporting remote databases and I may be iterating at some
>>> points over hundreds or more records that I've already queried and are
>>> persistent, so I wish these wouldn't expire.
>>> 
>>> Is this behavior intentional?
>> 
>> I think we already mentioned this in a previous email.  yes, that is the 
>> current behavior and is intentional.   If you'd like these to be merged in 
>> as None, set them to None on your incoming instance.  Otherwise their value 
>> is undefined and it is the correct behavior for them to be fetched from the 
>> database when requested.
> 
> I think we also mentioned that i was going to investigate limiting this 
> behavior to the load=False condition.  that issue still remains as the single 
> test we have which fails upon changing the behavior uses load=False.

yes, its ticket #1681.  the issue has already been logged and here is the 
message where I mentioned as much:  
http://groups.google.com/group/sqlalchemy/msg/6057ea3a24a548e9?



> 
> 
> 
>> 
>> 
>>> 
>>> Version 0.5.8
>>> 
>>> For example, see the output from this simple script:
>>> 
>>> =================================
>>> 
>>> from sqlalchemy import *
>>> from sqlalchemy.orm import *
>>> 
>>> engine = create_engine('postgres://kb:k...@localhost:5444/kb',echo=True)
>>> metadata = MetaData()
>>> Session = sessionmaker(bind=engine)
>>> DBSession = Session()
>>> 
>>> order_table = Table("orders", metadata,
>>>  Column("orderid", Unicode, primary_key=True),
>>>  Column("type", Unicode)
>>> )
>>> 
>>> 
>>> class Order(object):
>>>  pass
>>> 
>>> order_mapper = mapper(Order, order_table)
>>> 
>>> #metadata.create_all(engine)
>>> 
>>> o=Order()
>>> o.orderid=u'SALE25863'
>>> 
>>> DBSession.query(Order).get(u'SALE25863')
>>> 
>>> 
>>> merged=DBSession.merge(o)
>>> 
>>> merged.orderid
>>> merged.type    #<------------At this point, type is expired
>>> ################
>>> 
>>> ==================================================
>>> 
>>> 
>>> output:
>>> ==================================================
>>>>>> from sqlalchemy.orm import *
>>>>>> 
>>>>>> engine = create_engine('postgres://kb:k...@localhost:5444/kb',echo=True)
>>>>>> metadata = MetaData()
>>>>>> Session = sessionmaker(bind=engine)
>>>>>> DBSession = Session()
>>>>>> 
>>>>>> order_table = Table("orders", metadata,
>>> ...     Column("orderid", Unicode, primary_key=True),
>>> ...     Column("type", Unicode)
>>> ... )
>>>>>> 
>>>>>> 
>>>>>> class Order(object):
>>> ...     pass
>>> ...
>>>>>> order_mapper = mapper(Order, order_table)
>>>>>> 
>>>>>> #metadata.create_all(engine)
>>> ...
>>>>>> o=Order()
>>>>>> o.orderid=u'SALE25863'
>>>>>> 
>>>>>> DBSession.query(Order).get(u'SALE25863')
>>> 2010-02-20 05:55:11,859 INFO sqlalchemy.engine.base.Engine.0x...2cd0
>>> BEGIN
>>> 2010-02-20 05:55:11,863 INFO sqlalchemy.engine.base.Engine.0x...2cd0
>>> SELECT orders.orderid AS orders_orderid, orders.type AS orders_type
>>> FROM orders
>>> WHERE orders.orderid = %(param_1)s
>>> 2010-02-20 05:55:11,864 INFO sqlalchemy.engine.base.Engine.0x...2cd0
>>> {'param_1': 'SALE25863'}
>>> <__main__.Order object at 0x14ee710>
>>>>>> 
>>>>>> 
>>>>>> merged=DBSession.merge(o)
>>>>>> 
>>>>>> merged.orderid
>>> u'SALE25863'
>>> 
>>> #################################
>>>>>> merged.type   #<------------At this point, type is expired 
>>>>>> ################
>>> 2010-02-20 05:55:11,870 INFO sqlalchemy.engine.base.Engine.0x...2cd0
>>> SELECT orders.type AS orders_type
>>> FROM orders
>>> WHERE orders.orderid = %(param_1)s
>>> 2010-02-20 05:55:11,870 INFO sqlalchemy.engine.base.Engine.0x...2cd0
>>> {'param_1': 'SALE25863'}
>>> u'SAL'
>>>>>> 
>>>>>> 
>>> 
>>> -- 
>>> 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.
>> 
> 
> -- 
> 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