【问题标题】:Flask-Sqlalchemy seemingly "caching" queriesFlask-Sqlalchemy 看似“缓存”查询
【发布时间】:2014-09-11 07:52:20
【问题描述】:

我正在为 Flask 编写注册/登录脚本,并且正在使用 flask-sqlalchemy。要注册用户,我通过 flask-sqlalchemy 将他们的详细信息插入到数据库中,然后提交更改。但是,当他们尝试登录时,从数据库中获取他们的详细信息,我收到一个 NoneType 错误,表明我试图查找的条目不存在。

我正在使用 MySQL 5.5 和最新版本的 Flask 和 Flask-Sqlalchemy。

错误:

AttributeError: 'NoneType' object has no attribute 'password'

代码:

 newuser = User(username='username', email='email', valid=1, password='hashpass', rkey=rkey, score=0, ip=uip)
 db.session.add(newuser)
 db.session.commit()
 pwhash = User.query.filter_by(username='username').first().password
 return str(pwhash)

型号

 class User(db.Model):
    __tablename__ = 'users'
    uid = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(50))
    password = db.Column(db.Text)
    email = db.Column(db.String(120))
    rkey = db.Column(db.String(50))
    role = db.Column(db.String(20))
    valid = db.Column(db.Boolean)
    ip = db.Column(db.String(110))
    lastip = db.Column(db.String(110))
    score = db.Column(db.Integer)


    def __repr__(self):
        return '<User %r>' % self.username

【问题讨论】:

  • 什么时候将该用户添加到数据库中?上下文是什么?你能做一个print(db.query.all()) 看看数据库是否对它做了什么吗?
  • 运行 print(db.query.all()) 时,我得到File "&lt;debugger&gt;", line 1, in &lt;module&gt; print(db.query.all()) AttributeError: 'SQLAlchemy' object has no attribute 'query'。我在应用程序的开头设置了db = SQLAlchemy(),不确定这是否会有所不同。
  • errr 对不起,我的意思是User.query.all()
  • 它以这种格式回显一个列表:[&lt;User u'cydrobolt'&gt;, &lt;User u'admin'&gt; ...],但是我注册的新用户不在。
  • 这个问题似乎问的是同一个问题:stackoverflow.com/questions/15406623/…

标签: python mysql flask sqlalchemy flask-sqlalchemy


【解决方案1】:

我相信您的查询应该是:

pwhash = User.query.filter_by(User.username='username').first().password

【讨论】:

  • Model.fieldexpression 语法用于filterfilter_by 将字段名称作为关键字参数。
猜你喜欢
  • 2013-07-24
  • 1970-01-01
  • 2019-04-23
  • 2019-12-13
  • 2017-08-28
  • 1970-01-01
  • 1970-01-01
  • 2022-06-24
  • 1970-01-01
相关资源
最近更新 更多