Pergunta

Oi eu estou tentando atualizar uma linha de usuário mediante o registro do usuário. Eu simplesmente querem aumentar os usuários de login contar por um. Aqui está o código no método controlador 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)

O registro usuário simplesmente is not sendo atualizado no banco de dados. A documentação TG diz que o gerenciador de transações deve liberar todas as transações e automaticamente executar todo o SQL excelente, mas ele não parece estar a funcionar com a atualização. Eu tentei colocar em um DBSession.commit () depois que manualmente cometer, mas recebo uma mensagem de erro. Da mesma forma, adicionando DBSession.flush () para o método de controlador não erro, mas na verdade não atualizar o registro também.

Foi útil?

Solução

Desculpe tudo, despeja o gerenciador de transações TG2 estava trabalhando depois de tudo. O erro veio porque eu estava chamando a função post_login fora do gerenciador de transações e por isso a atualização de registro não estava sendo liberado. Eu não sei por que ele não estava deixando me comprometer. Mas eu me mudei o controlador post_login e agora o código acima eu especifiquei obras, ele atualiza automaticamente - não há necessidade até mesmo para DBSession.update (usuário).

Outras dicas

Você deve dizer ao objeto de sessão para atualizar o objeto:

DBSession.update(user)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top