如何在 mongoalchemy.(flask) 字段更改时更新数据库?
How to update DB when field changed in mongoalchemy.(flask)?
我正在使用flask-mongoalchemy做一个demo,这里有一个问题让我困惑了一段时间。
首先我创建了一个 class User
class Student(db.Document):
'''student info'''
name = db.StringField()
grade = db.IntField(required=False, default=None)
然后,我使用这个数据库创建了一些例子,比如student1, student2...等等。
现在,我将等级的默认值从 None 更改为 0
grade = db.IntField(required=False, default=0)
当我 运行 再次查询时,它引发错误:
mongoalchemy.exceptions.BadValueException: Bad value for field of type "grade". Reason: "Value is not an instance of <class 'int'>
SO,如何自动更新这个字段变化?我现在做的是手动修改数据库中的age值。
首先,要使查询像以前一样工作,请将字段上的 allow_none
option 设置为 True
。
grade = db.IntField(required=False, default=0, allow_none=True)
当解包为 python 个对象时,应该允许没有评分值的文档不会触发错误。
接下来,进行迁移,将等级为 None 的文档的默认值设置为 0。
from mongoalchemy.session import Session
with Session.connect('mongoalchemy') as s:
update = s.query(Student).filter(Student.grade == None).set(User.grade, 0)
update.execute()
最后,将字段声明切换回不允许 None
成绩值。
我正在使用flask-mongoalchemy做一个demo,这里有一个问题让我困惑了一段时间。 首先我创建了一个 class User
class Student(db.Document):
'''student info'''
name = db.StringField()
grade = db.IntField(required=False, default=None)
然后,我使用这个数据库创建了一些例子,比如student1, student2...等等。 现在,我将等级的默认值从 None 更改为 0
grade = db.IntField(required=False, default=0)
当我 运行 再次查询时,它引发错误:
mongoalchemy.exceptions.BadValueException: Bad value for field of type "grade". Reason: "Value is not an instance of <class 'int'>
SO,如何自动更新这个字段变化?我现在做的是手动修改数据库中的age值。
首先,要使查询像以前一样工作,请将字段上的 allow_none
option 设置为 True
。
grade = db.IntField(required=False, default=0, allow_none=True)
当解包为 python 个对象时,应该允许没有评分值的文档不会触发错误。
接下来,进行迁移,将等级为 None 的文档的默认值设置为 0。
from mongoalchemy.session import Session
with Session.connect('mongoalchemy') as s:
update = s.query(Student).filter(Student.grade == None).set(User.grade, 0)
update.execute()
最后,将字段声明切换回不允许 None
成绩值。