Google Groups Home
Help | Sign in
Message from discussion Help with implicit transactions
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
Alberto Valverde  
View profile
 More options Apr 16 2007, 2:51 pm
From: Alberto Valverde <albe...@toscat.net>
Date: Mon, 16 Apr 2007 20:51:59 +0200
Local: Mon, Apr 16 2007 2:51 pm
Subject: Re: [TurboGears] Re: Help with implicit transactions

On Apr 16, 2007, at 6:53 PM, George Sakkis wrote:

> On Apr 16, 12:18 pm, Alberto Valverde <albe...@toscat.net> wrote:
>> On Apr 16, 2007, at 5:54 PM, George Sakkis wrote:

>>> Is there any way I can force a COMMIT within an exposed method ?  
>>> I am
>>> using SqlAlchemy with PostgreSQL and I am creating a few records  
>>> that
>>> I need to use for subsequent SELECTs within the same method.  
>>> Although
>>> I do flush() them and get their assigned IDs, subsequent explicit
>>> SELECTs (using SA's select(), not the data mappers) fail to see the
>>> changes.

>> How are you obtaining the engine when you use SA's select? You should
>> use the same connection the transaction is using so you see its
>> changes, check out [1]

> I use:

> from turbogears import database as db
> engine=db.get_engine()

> How can I access the implicit transaction created by TG or its
> connection object ?

You'll need access to the transaction instance. Unfortunately it's a  
local variable inside database.sa_rwt. Perhaps it should be bound to  
cherrypy.request so you could do:

connection = engine.connect()
cherrypy.request.sa_transaction.add(connection)

then connection.execute(table.select()) # or whatever

as described in the mentioned link. Can you try this patch see if it  
works?

Index: turbogears/database.py
===================================================================
--- turbogears/database.py      (revision 2824)
+++ turbogears/database.py      (working copy)
@@ -336,7 +336,8 @@
[run_with_transaction.when("_use_sa()")]
def sa_rwt(func, *args, **kw):
      log.debug("New SA transaction")
-    transaction = session.create_transaction()
+    req = cherrypy.request
+    transaction = req.sa_transaction = session.create_transaction()
      try:
          retval = func(*args, **kw)
          transaction.commit()

Alberto


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.

Create a group - Google Groups - Google Home - Terms of Service - Privacy Policy
©2008 Google