On Jan 15, 2011, at 11:53 AM, Tvrtko wrote:

> This is my first such case in 5-6 years of using the SA. Usually the
> problem was with my code. This could also be the case now, but it
> escapes me where I made a mistake.

not suggesting you made a mistake.   suggesting that some artifact of your 
relationship setup may be causing the UOW to make the wrong decision.   the 
setup below seems very simple so it remains a mystery what would be causing the 
issue.



> 
> Thank you for your time. I will consider this closed for now and move
> on using a workaround of explicitly populating campaign_id. I guess I
> will try 0.6 or even 0.7 in the next few months.
> 
> Thanks,
> Tvrtko
> 
> P.S. for the curious, my relations go like this:
> 
> from elixir import Entity, Field, ...
> 
> class Campaign(Entity):
>    id = Field(Integer, Sequence('cc_campaign_seq'),
> colname='campaign_id', primary_key=True)
>    qitems = OneToMany('QItem')
> 
> class QItem(Entity):
>    id = Field(Integer, Sequence('cc_qitem_seq'), colname='qitem_id',
> primary_key=True)
>    campaign = ManyToOne('Campaign', colname='campaign_id',
> required=True)
> 
> 
> On Jan 15, 5:32 pm, Michael Bayer <mike...@zzzcomputing.com> wrote:
>> On Jan 15, 2011, at 11:10 AM, Tvrtko wrote:
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>>> On Jan 15, 4:35 pm, Michael Bayer <mike...@zzzcomputing.com> wrote:
>>>> So, you have A->B, an exception occurs, you do the rollback, then you're 
>>>> somehow trying to continue on within the web request ?     The code 
>>>> examples here are out of context snippets and I don't see any exception 
>>>> handling happening so they don't really tell me much.    When the flush 
>>>> fails, the internal state is completely expired.   Campaign, if pending 
>>>> when the transaction started, now transient again, qitem is also 
>>>> transient.   Previous flushes within that transaction have no effect on 
>>>> this.    Campaign and qitem would retain their relationship to each other, 
>>>> campaign_id would probably remain present, but if you were to re-add the 
>>>> two, it would be overwritten on the next flush.
>> 
>>> You are right. I presented the issues in a confusing manner because I
>>> was not exactly sure what was happening in the first place.
>> 
>>> I am *not* continuing with request after exception. I was reraising
>>> exception after a debug print. Unfortunately that debug print has lead
>>> me in the wrong direction of thinking that objects were expunged
>>> before the flush. That is not the case.
>> 
>>> What actually happens is that save mechanism sometimes gets underlying
>>> ID from related object end sometimes it doesn't. Note that campaign
>>> has ID, and that campaign is associated with qitem and still,
>>> qitem.contact_id is not allways set during a save/flush.
>> 
>>> Debug print from inside `mapper._save_obj()`:
>> 
>>> Good case:
>> 
>>>    qitem state dict = {'campaign': <Campaign 233, u'Test'>,
>>> 'campaign_id': 233, ...}
>> 
>>> And for the bad case:
>> 
>>>    qitem state dict = {'campaign': <Campaign 234, u'Test'>,
>>> 'campaign_id': None, ...}
>> 
>> OK, then I need a full reproducing test case which shows how that result 
>> occurs.    Its not a known issue off the top of my head.  Also, please note 
>> that I am in no way suggesting you upgrade your application to 0.6, however, 
>> if you test your development code with 0.6 and the problem goes away, that 
>> would indicate something specific to 0.5 might be the cause.    I would 
>> suggest that it may be related to how your relationships are set up, such 
>> that a dependency between QItem and Campaign is not correctly established, 
>> leading the ORM to sometimes handle one or the other first.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> To unsubscribe from this group, send email to 
> sqlalchemy+unsubscr...@googlegroups.com.
> 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 sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to