Как обновить БД при изменении поля в монгоалхимии. (flask)? - PullRequest
0 голосов
/ 16 февраля 2020

Я использую flask -монгоалхимию для демонстрации, и вот этот вопрос меня смутил на некоторое время. Сначала я создаю класс 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'>

ТАК, как автоматически обновить это поле? Теперь я изменил значение age в базе данных вручную.

1 Ответ

0 голосов
/ 17 февраля 2020

Во-первых, чтобы заставить запросы работать как прежде, установите 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 значения для оценки.

...