如何在turbogears 2中使用DBSession更新记录

时间:2010-01-07 05:54:07

标签: python sqlalchemy turbogears2

您好我正在尝试在用户登录时更新用户行。我只想将用户登录数增加一。这是post_login控制器方法中的代码:

@expose()  
def post_login(self, came_from=url('/')):  
    """  
    Redirect the user to the initially requested page on successful  
    authentication or redirect her back to the login page if login failed.  
    """  
    if not request.identity:  
        login_counter = request.environ['repoze.who.logins'] + 1  
        redirect(url('/user/login', came_from=came_from, __logins=login_counter))  

    user_name = request.identity['repoze.who.userid']
    user = User.by_user_name(user_name)
    user.tll_num_logins += 1
    user.tll_last_login = datetime.now()
    redirect(came_from)

用户记录根本没有在数据库中更新。 TG文档说事务管理器应该刷新所有事务并自动执行所有未完成的SQL,但它似乎没有使用更新。我尝试在手动提交后输入DBSession.commit()但收到错误消息。同样,将DBSession.flush()添加到控制器方法不会出错,但实际上也不会更新记录。

2 个答案:

答案 0 :(得分:2)

对不起,毕竟TG2事务管理器工作正常。出现错误是因为我在事务管理器之外调用了post_login函数,因此记录更新没有被刷新。我不确定为什么不让我承诺。但我移动了post_login控制器,现在我指定的上述代码工作,它自动更新 - 甚至不需要DBSession.update(用户)。

答案 1 :(得分:1)

您必须告诉会话对象更新对象:

DBSession.update(user)