使用表单中的布尔值更新 sqlalchemy

Updating sqlalchemy with boolean value from form

我正在尝试使用 wtforms 布尔字段中的值更新数据库 table 中的一行。创建行时,它毫无问题地插入到数据库中,但更新时出现以下错误。

阅读此问题时,它似乎与数据库应接受的布尔值类型的初始化有关。在我的 sqlite 数据库中,该列包含 1/0,但我不确定如何修复它。初始插入没问题,但更新却不行,这似乎很奇怪。 wtforms 文档提到 HTML returns 中的 checked.data 是 True 或 False 值。

class Question(PaginatedAPIMixin, db.Model):
    __tablename__ = 'question'
    ...
    answer_space = db.Column(db.Boolean, server_default="False")
    ...

class QuestionForm(FlaskForm):
    ...
    answer_space = BooleanField('Generate space for question answer automatically?',default="checked")
    ...

# inside add question route
if form.validate_on_submit():
        question = Question(body=form.body.data,
                            answer_space=form.answer_space.data, 
                            author=current_user,
                            exam_level = form.exam_level.data, 
                            exam_board=form.exam_board.data, 
                            exam_year=form.exam_year.data,
                            exam_session=form.exam_session.data,
                            marks=form.marks.data, 
                            answer=form.answer.data,
                            )
        ...    
        db.session.add(question)
        db.session.commit()

#inside update question route
if form.validate_on_submit():
        question.body = form.body.data
        question.answer_space = form.answer_space.data,
        question.exam_board=form.exam_board.data
        question.exam_level = form.exam_level.data
        question.exam_year=form.exam_year.data
        question.exam_session=form.exam_session.data
        question.marks=form.marks.data
        question.answer=form.answer.data

        ...

        db.session.commit()
        flash('Your changes have been saved.', 'success')
        return redirect(url_for('main.view_questions'))

sqlalchemy.exc.StatementError: (builtins.TypeError) 不是布尔值:False [SQL: 更新问题集 exam_session=?, answer_space=?其中 question.id = ?] [参数: [{'answer_space': (False,), 'exam_session': '1', 'question_id': 12}]]

您的代码中有一个额外的逗号(在 form.answer_space.data 之后),但我认为这是来自复制和粘贴..

你试过了吗

answer_space = db.Column(db.Boolean, default=False, server_default="false")

还有吗?