我想更新數據庫中的一行(如果存在),或者如果它不存在,則創建它。在另一個類方法我此Flask-SQLAlchemy不會更新或刪除一行
然後,稍後:
if self.user is not None:
self.user.foo = bar # etc. Change the attributes of self.user
else:
self.user = models.User(bar, ...) # create a new model
db.session.add(self.user)
db.session.commit()
問題是,相應的行中的
我有一個類,首先將實例變量user
數據庫不會更新。我也嘗試過這種做法:
if self.user is not None:
self.user.foo = bar
else:
self.user = models.User(bar, ...)
db.session.add(self.user) # add it to the session either way
db.session.commit()
這裏,db.session.add()調用失敗sqlalchemy.exc.InvalidRequestError: Object '<User at 0x7f4918172890>' is already attached to session '1' (this is '2')
而且我想的第一件事就是刪除在所有情況下,現有的模型,然後創建一個新的,即:
if self.user is not None:
db.session.delete(self.user)
self.user = models.User(bar, ...)
db.session.add(self.user)
db.session.commit()
在這種情況下db.session.delete()調用失敗具有相同already attached to session '1'
消息如上。
爲什麼對象附加到不同的會話,而不是相同的?我如何正確地做到這一點?
這正是我的代碼所做的,除了步驟1與步驟2-3的方法不同。而數據庫不會更新。我會看看我是否可以將其減少到最小范例。 –
好吧,我以爲你說過「#把它添加到會議的任何方式」。這可能是問題。如果它是新用戶,您只想將其添加到會話中。在我的第2步中,我只添加到else塊中的會話。你也一樣嗎? – codegeek
如前所述,我嘗試了兩種方法。如果我在修改會話時將其添加到會話中,則會出現錯誤(與您所說的內容相符)。如果我不這樣做,它不會更新。 –