使用sqlalchemy无法提交数据库

时间:2019-03-14 02:09:27

标签: flask sqlalchemy

我正在制作一个视频页面,该视频页面可以跟踪播放时间和评论时间,每次我重新加载页面时,都使用{{ movie.play_num }}显示播放时间,它可以正常工作,但是不会更改数据库,所以我不知道怎么回事?似乎session.commit()不起作用。 此外,如果我在评论字段中输入一些单词并提交,则会显示waiting for response...,看起来服务器一直在等待超时。

这是我的代码:

def play(id=None):
    movie = Movie.query.join(Tag).filter(
        Tag.id == Movie.tag_id,
        Movie.id == int(id)
    ).first_or_404()
    form = CommentForm()
    if "user" in session and form.validate_on_submit():
        data = form.data
        comment = Comment(
            content=data["content"],
            movie_id=movie.id,
            user_id=session["user_id"]
        )
        db.session.add(comment)
        db.session.commit() # problem here
        movie.comment_num = movie.comment_num + 1
        flash("Success", "ok")
        return redirect(url_for("home.play", id=movie.id))
    movie.play_num = movie.play_num + 1
    try:
        db.session.commit() # and problem here
    except:
        db.session.rollback()
    return render_template("home/play.html", movie=movie, form=form)

enter image description here

看到play_num已从0更改为1,这是我第一次重新加载页面,但是第二次无法打开页面,并且控制台无法收集任何数据发生错误:

  

由于刷新期间先前存在异常,因此此会话的事务已回滚。要开始与此Session进行新事务,请首先发出Session.rollback()。原始异常是:(由于查询调用的自动刷新而引发;如果此刷新过早发生,请考虑使用session.no_autoflush块)(pymysql.err.InternalError)

如何解决此问题

1 个答案:

答案 0 :(得分:0)

您尝试捕获msg异常:

from sqlalchemy.exc import SQLAlchemyError
try:
    db.session.commit()
except SQLAlchemyError as e:
    print(str(e))
    db.session.rollback()

首先检查味精错误是什么