[英]SQLAlchemy Query returning None
我在我的ubuntu 16和Nginx + uwsgi上有一個使用SQLAlchemy和MySQL-server的Web應用程序。
在創建引擎的同時,我放了
echo=True
獲取查詢的跟蹤。 我有注冊用戶的問題,每次在flask登錄時調用user_loader,我執行:
dbsession.query(User).filter_by(id=user_id).first()
我得到的結果是:
INFO sqlalchemy.engine.base.Engine SELECT user.id AS user_id, user.name AS user_name, user.email AS user_email, user.pass$
Mar 29 23:48:56 ubuntu-512mb-sgp1-01 uwsgi[26160]: FROM user
Mar 29 23:48:56 ubuntu-512mb-sgp1-01 uwsgi[26160]: WHERE user.id = %s
Mar 29 23:48:56 ubuntu-512mb-sgp1-01 uwsgi[26160]: LIMIT %s
Mar 29 23:48:56 ubuntu-512mb-sgp1-01 uwsgi[26160]: 2017-03-29 23:48:56,517 INFO sqlalchemy.engine.base.Engine ('61', 1)
結果是無。 但是,在上面的例子中,使用user_id = 61,我可以在ubuntu中的mysql shell上找到用戶獲取用戶ID 61。
當我刷新頁面幾次,結果就會出來。 一旦用戶完成注冊,他們將被重定向到登錄頁面,在完成表單后,它會顯示錯誤“請注冊”,如果現在使用此查詢找到用戶,則會觸發該錯誤:
dbsession.query(User).filter_by(id=user_id).first()
在注冊時我的代碼是:
user = User(name=name, email=email, password=password)
dbsession.add(user)
dbsession.commit()
return redirect(url_for('login'))
檢查已完成,以確保名稱,電子郵件密碼有效。
謝謝
解決了這個問題。
感謝@iljaEverila。
基本上我需要確保來自SQLAlchemy的dbsession已經持久保存數據並且沒有待處理的事務。 因此,一旦用戶注冊並調用user_loader,我只需要調用:
dbsession.commit()
然后調用這個:
dbsession.query(User).filter_by(id=user_id).first()
會成功的。
謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.