我有一个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对象。如何确保新数据在里面? –