我一整天都在毆打我的頭。所以我想用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