Skip to main content
 首页 » 编程设计

python之为什么 flask sql alchemy 不更新记录的属性

2025年05月04日7JustinYoung

我有一个如下所示的类:

class Account(db.Model, flask_login.UserMixin): 
    __tablename__ = 'account' 
    id = db.Column(db.Integer, primary_key=True) 
    email = db.Column(db.String(75)) 
    username = db.Column(db.String(50)) 
    password = db.Column(db.String(250)) 
    admin = db.Column(db.Boolean) 
 
    def __init__(self, email='', username='', password='', admin=None): 
        self.email = email 
        self.username = username 
        self.password = password 
        self.admin = admin 
 
    def __repr__(self): 
        return '<Account %r>' % self.username 

当我通过表单创建帐户时,admin 属性将为 None。然而,当我访问数据库并尝试手动将其设置为 True 时,该属性将更新,但是当我再次访问数据库时,该属性为 None 这非常烦人。

这是我在控制台上执行的:

account = Account.query.get(1) 
account.admin = True 
db.session.commit() 
db.admin ----> True 
 
exit() 
 
#restart again 
account = Account.query.get(1) 
account.admin ----> None 

我做错了什么?

请您参考如下方法:

只需这样做:

account = Account.query.get(1) 
account.admin = True 
db.session.merge(account) 
db.session.commit() 

更改将被检测并发送到数据库。

您拥有的实例和 session 中的对象不一定相同 - 尽管它们代表相同的事物 - 它们不是同一个对象。 在 Flask-SqlAlchemy 中,有一个配置 SQLALCHEMY_TRACK_MODIFICATIONS 可以让 sqlalchemy 按你的意愿工作。但它非常昂贵,因为 orm 必须监视对所有实例所做的更改。

希望这对您有所帮助!