使用表单中的布尔值更新 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")
还有吗?
我正在尝试使用 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")
还有吗?