mongodb - mongoalchemy.(flask)中字段更改时如何更新数据库?
问题描述
我正在使用flask-mongoalchemy进行演示,这里有一个问题让我困惑了一段时间。起初我创建了一个类用户
class Student(db.Document):
'''student info'''
name = db.StringField()
grade = db.IntField(required=False, default=None)
然后,我使用这个 DB 并创建了一些示例,例如 student1、student2...等等。现在,我将 Grade 的默认值从 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,如何自动更新这个字段变化?我现在所做的是手动修改数据库中年龄的值。
解决方案
首先,要让查询像以前一样工作,将字段上的allow_none
选项True
设置为.
grade = db.IntField(required=False, default=0, allow_none=True)
这应该允许对等级没有价值的文档在展开为 python 对象时不会触发错误。
接下来,进行迁移,将 Grade 为 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
成绩的值。