我有一個Web應用程序在我的ubuntu 16 & Nginx + uwsgi上使用SQLAlchemy和MySQL服務器。SQLAlchemy查詢返回無
在創建引擎,我把
echo=True
得到的查詢追蹤。我有問題的用戶註冊,每次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'))
檢查已完成確保名稱,電子郵件密碼有效。
謝謝
請提供[最小,*完整*和*可驗證*示例](http://stackoverflow.com/help/mcve)。您的問題可能源於多種原因。例如,MySQL的默認事務隔離級別是[REPEATABLE READ](https://en.wikipedia.org/wiki/Isolation_(database_systems)#Repeatable_reads),因此如果由於任何原因您的事務徘徊不前,您將無法閱讀新鮮事數據。什麼是「然而,用戶ID 61是有效的並且可以被調用。」意思是。它怎麼能被「叫」? –
也許是一個錯誤的數據庫? –
@IljaEverilä如果您看到user.id作爲61傳入(不重要'61'或61)。我試着使用session.execute查詢數據庫,並返回正確的用戶。然而,這個session.query()。first()會一直迴應None,有時候會返回一個User對象。如何確保新數據在裏面? –