On Jun 28, 2011, at 4:29 AM, NiL wrote:

> Hi list,
> 
> I have a turbogears controller, the model are elixir defined.
> 
>    def copy(self, scenario_id, **kwargs):
>        """ copy a scenario
> 
>        :param scenario_id: id of a :class:`model.Scenario`
>        :type media_id: string
>        """
>        user = request.environ['repoze.who.identity']['user']
>        scenario = Scenario.get(scenario_id)
> 
>        clone = Scenario(owner = user)
>        Session.add(clone)
>        Session.commit()
> 
>        from nose.tools import set_trace; set_trace()
>        details = kwargs.get('details', False)
>        return dict(scenario=clone, details=details)


commit() expires all attributes.    As soon as they are accessed again, the 
database must be queried, and a new transaction begins.

the real issue here is that its better to have a single commit() that encloses 
a series of operations, and nothing happens outside of the commit().   Calling 
commit() in an ad-hoc fashion inside of business methods is not a good pattern 
and suggests the application doesnt have clear boundaries as to when 
transactions begin and end.



> 
> I'm bound to a postgres database.
> 
> just before the commit, I can observe a "<IDLE> in transaction" lock
> in PG (normal)
> Then I commit() the output from sqla debug is something like :
> 
> 2011-06-28 09:56:16,804 INFO sqlalchemy.engine.base.Engine.0x...3dcc
> BEGIN (implicit)
> 2011-06-28 09:56:16,806 INFO sqlalchemy.engine.base.Engine.0x...3dcc
> SELECT "user".user_id AS user_user_id, "user".user_name AS
> user_user_name, "user".password AS user_password,
> "user".password_check AS user_password_check, "user".email_address AS
> user_email_address, "user".display_name AS user_display_name,
> "user".created AS user_created, "user".active AS user_active,
> "user".permission_assoc_id AS user_permission_assoc_id
> FROM "user"
> WHERE "user".user_id = %(param_1)s
> 
> and thus <IDLE> in transaction is back.
> When I run this in test, the next thing is the tear down, that will
> try to drop all tables to run next test, and everything will get
> stuck....
> 
> 
> what am I missing here ?
> 
> regards
> NIL
> 
> -- 
> 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