如何将会话变量设置为数据库中的值?

use*_*084 0 python pylons pyramid

newb to python和pyramid/pylons.用户登录后,我想在我的数据库中获取一些数据并将其存储在会话变量中.我已经能够用remember()存储用户的登录ID.使用request.session,我可以设置一个会话变量,只要它是一个字符串,但如果我尝试从我的数据库中检索一些东西,我会收到一个错误:"BadPickleGet: ".这是我的观点的相关部分:

if 'form.submitted' in request.params:
        login = request.params['login']
        password = request.params['password']
        if User.check_password(login, password):
            headers = remember(request, login) # ie dave
            session = request.session
            #session['myvar'] = 'somethinghardcoded' # this works!
            session['myvar'] = User.myfield # this doesn't work!
            session.save()
            return HTTPFound(location=came_from, headers=headers)
Run Code Online (Sandbox Code Playgroud)

Mic*_*kel 5

在您的示例中,您不处理User从数据库加载的实例.这就像是user = DBSession.query(User).filter_by(login).first().User.myfield和之间存在很大差异user.myfield,其中第一个只是Column对象或属性,第二个是数据库中特定行的实际数据.您的错误可能只是无法挑选一个Column对象.会话可以很好地挑选原始类型(整数,字符串等).