Wonderful, thanks.

On Wednesday, February 24, 2016 at 7:50:53 AM UTC-7, Mike Bayer wrote:
>
> get the connectable first: 
>
> connection = engine_or_connection.connect() 
>
> then do your context manager from that. 
>
> the connection returned, if engine_or_connection is already a 
> Connection, is "branched", meaning it is safe to call close() on it 
> without affecting the original. 
>
> So fully: 
>
> with engine_or_connection.connect() as conn: 
>      with conn.begin() as trans: 
>          # etc. 
>
>
> On 02/23/2016 11:05 PM, Jonathan Beluch wrote: 
> > Is there a better way of doing this? Basically I have a function that 
> > takes a connectable (engine or connection) and I want to start a 
> > transaction. However I can't just call .begin() because it could return 
> > a Transaction or a Connection depending on what was passed in and I need 
> > a connection. 
> > 
> > @contextlib.contextmanager 
> > def _transaction(connectable): 
> >      if hasattr(connectable, 'in_transaction') and 
> > connectable.in_transaction(): 
> >          yield connectable 
> >      else: 
> >          with connectable.begin() as conn: 
> >              yield conn 
> > 
> > -- 
> > You received this message because you are subscribed to the Google 
> > Groups "sqlalchemy" group. 
> > To unsubscribe from this group and stop receiving emails from it, send 
> > an email to [email protected] <javascript:> 
> > <mailto:[email protected] <javascript:>>. 
> > To post to this group, send email to [email protected] 
> <javascript:> 
> > <mailto:[email protected] <javascript:>>. 
> > Visit this group at https://groups.google.com/group/sqlalchemy. 
> > For more options, visit https://groups.google.com/d/optout. 
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to