如何在 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 成绩值。