On Feb 15, 2012, at 12:21 AM, Manav Goel wrote:

> My use case requires that if insertion of object of Myclass succeeds
> then insert Object of Myclass1 .
> Even if inserting of Myclass1 object fails insertion of Myclass should
> not be rolled back.
> I mean adding Myclass is permanent and does not depend on failure or
> success of insertion of Myclass1.
> I have written following code and want to know if am understanding
> right usage of begin_nested and not writing buggy code.
> I am using postgresql 9.0
> try:
>     obj =Myclass()
>     session.add(obj)
>     if condition true:
>            session.begin_nested()
>            try:
>                n = Myclass1(arguments)
>                session.add(n)
>            except SQLAlchemyError:
>                db_session.rollback()
> 
>      session.commit()
> except SQLAlchemyError:
>      session.rollback()
>      raise
> 
> Code is running f9, just want to make sure of some unknown gotcha in
> this code.
> Other option will be I commit after adding Myclass and perform
> insertion of Myclass1 in separate transaction but this way is not
> appealing to me.

assuming that "db_session" is a typo for "session", then yes this is the basic 
idea.    There's a slight gotcha in that you're not inspecting the actual 
SQLAlchemyError coming in, you might want to limit that to IntegrityError which 
is what psycopg2 usually throws for these.

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