1

我有 db.model 像:

class UserProfile(db.Model):
  __tablename__ = 'UserProfile'
  nickname = db.Column(db.String(40), primary_key=True)
  wm = db.Column(db.Boolean)

def __init__(self,name):
    self.nickname = name
    self.wm  = 1

def __repr__(self):
    return '<UserProfile {nickname}>'.format(username=self.nickname)

在用户登录期间 - 我试图从数据库中检索记录并将其值存储在会话变量中 -

    userprofile = UserProfile(form.username.data)
    userprofile = UserProfile.query.filter_by(nickname=form.username.data).first()
    session['wm']=userprofile.wm

但它失败了,消息如下:

     session['wm']=userprofile.wm
     AttributeError: 'NoneType' object has no attribute 'wm'

mysql数据库:

mysql> desc UserProfile;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| nickname   | varchar(40) | NO   | PRI | NULL    |       |
| wm         | tinyint(1)  | YES  |     | NULL    |       |

它也有记录。

谢谢你的帮助。

4

2 回答 2

4

您需要先将新对象实际添加UserProfile到数据库中:

userprofile = UserProfile(form.username.data)
db.session.add(userprofile)

请参阅有关插入的 Flask-SQLAlchemy 文档

在将对象添加到会话之前,SQLAlchemy 基本上不打算将其添加到事务中。这很好,因为您仍然可以放弃更改。例如,考虑在页面上创建帖子,但您只想将帖子传递给模板以进行预览渲染,而不是将其存储在数据库中。

然后add()函数调用添加对象。

于 2013-03-24T14:20:08.113 回答
0

添加后您需要提交,才能看到更改

userprofile = UserProfile(form.username.data)
db.session.add(userprofile)
db.session.commit()
于 2015-08-13T11:33:26.980 回答