2014-07-20 40 views
2

我正在爲Flask寫一個註冊/登錄腳本,而我正在使用flask-sqlalchemy。爲了簽署用戶,我通過flask-sqlalchemy將他們的詳細信息插入到數據庫中,然後提交更改。但是,當他們嘗試登錄時,從db中獲取它們的詳細信息時,我得到一個NoneType錯誤,表明我試圖找到的條目不存在。Flask-Sqlalchemy看似「緩存」查詢

我正在使用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 
+0

磨片你是否將這個用戶添加到數據庫?什麼是上下文?你可以做一個'print(db.query.all())'並查看數據庫是否對它做了什麼? – corvid

+0

當運行打印(db.query.all()),我得到 '文件 「」,1號線,在 打印(db.query.all()) AttributeError的: 'SQLAlchemy的' 對象有沒有屬性' query''。我在應用程序的開頭設置了'db = SQLAlchemy()',並不確定這是否有所幫助。 – Cydrobolt

+0

errr對不起,我的意思是'User.query.all()' – corvid

回答

1

我相信您的查詢應該是:

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

'Model.field'expression語法用於'filter'。 'filter_by'將字段名稱作爲關鍵字參數。 – dirn

+0

不起作用; SyntaxError:關鍵字不能是表達式 – Cydrobolt