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)

そして、ユーザーログイン中に-dbからレコードを取得し、その値をセッション変数に格納しようとしています-

    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 db:

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 に答える