我正在制作一个视频页面,该视频页面可以跟踪播放时间和评论时间,每次我重新加载页面时,都使用{{ 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)
看到play_num
已从0更改为1,这是我第一次重新加载页面,但是第二次无法打开页面,并且控制台无法收集任何数据发生错误:
由于刷新期间先前存在异常,因此此会话的事务已回滚。要开始与此Session进行新事务,请首先发出Session.rollback()。原始异常是:(由于查询调用的自动刷新而引发;如果此刷新过早发生,请考虑使用session.no_autoflush块)(pymysql.err.InternalError)
如何解决此问题
答案 0 :(得分:0)
您尝试捕获msg异常:
from sqlalchemy.exc import SQLAlchemyError
try:
db.session.commit()
except SQLAlchemyError as e:
print(str(e))
db.session.rollback()
首先检查味精错误是什么