gpt4 book ai didi

sqlalchemy - Flask-SQLAlchemy 不会更新或删除一行

转载 作者:行者123 更新时间:2023-12-03 17:05:52 25 4
gpt4 key购买 nike

我想更新数据库中的一行(如果存在),或者如果不存在则创建它。

我有一个类首先设置实例变量 user :

self.user = models.User.query.filter_by(entity=self.entityUrl).first()
# can be None if not found

然后,稍后在另一个类方法中我这样做:
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()

问题是,数据库中的相应行没有得到更新。我也尝试过这种方法:
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'消息如上。

为什么对象附加到不同的 session 而不是同一个 session ?我该如何正确地做到这一点?

最佳答案

确保类中的 foo 属性存在。接下来,也许你使用它的方式有问题。因为我看到你使用“self.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 - Flask-SQLAlchemy 不会更新或删除一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14108890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com