首页 > 解决方案 > 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,如何自动更新这个字段变化?我现在所做的是手动修改数据库中年龄的值。

标签: mongodbflaskflask-sqlalchemypymongomongoalchemy

解决方案


首先,要让查询像以前一样工作,将字段上的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成绩的值。


推荐阅读