Dan*_*bio 4 python sqlalchemy flask flask-sqlalchemy
我有一个如下所示的类:
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
Run Code Online (Sandbox Code Playgroud)
当我通过表单创建帐户时,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
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
只需这样做:
account = Account.query.get(1)
account.admin = True
db.session.merge(account)
db.session.commit()
Run Code Online (Sandbox Code Playgroud)
将检测到更改并将其发送到数据库。
您拥有的实例和会话中的对象不一定相同 - 尽管它们代表相同的事物 - 它们不是同一个对象。在 Flask-SqlAlchemy 中有一个配置 SQLALCHEMY_TRACK_MODIFICATIONS 可以让 sqlalchemy 像你想要的那样工作。但它非常昂贵,因为 orm 必须监视对所有实例所做的更改。
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
4308 次 |
| 最近记录: |