> On 5/27/07, Anil <[EMAIL PROTECTED]> wrote:
>>user = session["user"]
>>alert = model.Alert(form_result["name"])
>>user.alerts.append(alert)
>>user.save_or_update()
>>user.flush()
>>
>>I save a User SA object in session["user"] in another page. Then, in
>>this page, I try to add Alert objects to the user object. I get this
>>exception.
>>
>><class 'sqlalchemy.exceptions.InvalidRequestError'>: Object
>>'<entic.models.Alert object at 0xcc2970>' is already attached to
>>session '13378672' (this is '12302224')
>>
>>Can someone give me pointers on how I can resolve this?
>>
>>Plus, are there any best practices for passing around SA mapped
>>objects in beaker sessions?

Make sure you set all your User object's relations to lazy=False if 
you'll later want to access the user's alerts. This will cache the user 
object *and* it's attached alerts.

Shannon -jj Behrens wrote:
> I would say *don't* ;)

+1 if your making modifications to your model.

> I wouldn't expect a SA object to be serializable.  It just doesn't
> make sense to me.  I don't even want to think about complications with
> the database and ACID, nor do I want to consider the scalability
> concerns (the SA object should be tied to a particular SA session,
> right?).

(I didn't know about the "ACID" acronym: Atomicity, Consistency, 
Isolation, Durability. Thanks. ;) )

SA was built with consistency and integrety in mind, before anything 
else. So I'm not sure you can make modifications to an 'old' User object 
because SA wants to keep track of what happens between a model and the 
database itself. So loading an old object doesn't reflect the database 
state during your current SA session.

So if you want to make modifications, SA will need to load a freshly 
fetched user information from your database.

I think this is how it works.

I actually store my User object in the session (in cache trully for 
application wide usage) but for *read-only* purpose. I set all relations 
to lazy=False so when the user loads, it loads all it's details, 
privileges, group memberships, and group's privileges (a rather long 
generated query). I can later access from cache my user's 
.has_privilege() method to check which parts of the application should 
be displayed to the user.

Regards,
-- 
Alexandre CONRAD


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"pylons-discuss" 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/pylons-discuss?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to