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.
>
>
>>
>> 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.