我一整天都在殴打我的头。所以我想用Flask-SQLAlchemy和Flask-Login构建一个简单的Flask应用程序。我的用户的烧瓶登录类看起来是这样的:Flask-SQLAlchemy InvalidRequestError
class SiteUser(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String, nullable=False, unique=True)
password = db.Column(db.String, nullable=False)
我也有一个类来存储,看起来像这一点,并建立了一个从用户到许多内容关系的用户内容:
class UserContent(db.Model):
id = db.Column(db.Integer, primary_key=True)
content = db.Column(db.Text, nullable=False)
author_id = db.Column(db.Integer, db.ForeignKey('site_user.id'))
author = db.relationship(SiteUser, backref=db.backref('contents', lazy='dynamic'))
当我创建的数据内容我使用这种逻辑:
new_content = UserContent(content=form_content, author=current_user)
db.session.add(new_content)
db.session.commit()
我得到一个令人沮丧的InvalidRequestError
在那里我的模型实例添加到行会议。 SQLAlchemy告诉我,UserContent
对象已经连接到不同的会话。但我认为Flask-SQLAlchemy应该在每个请求结束时自动删除会话。 current_user
当然是Flask-Login变量,它拥有此刻登录的用户。如果我创建新UserContent
时省略了作者,它的工作原理,所以这个问题必须与我是怎么装的瓶,登录用户加载功能的当前用户,我在这里:
@login_manager.user_loader
def user_loader(id):
user = SiteUser.query.get(id)
if user is not None:
return user
return
唯一的其他地方在到目前为止,我正在触摸数据库的应用程序是在对用户进行身份验证时,但该代码不会引发错误。我用SQLite和PostgreSQL都试过,但仍然出现相同的错误。有人看到我失踪的东西吗?
谢谢! :)
确实模块有与会话有关的任何事情? – georgexsh