использование sqlalchemy не может зафиксировать в базе данных - PullRequest
0 голосов
/ 14 марта 2019

Я создаю страницу видео, которая может отслеживать время воспроизведения и время комментариев, каждый раз, когда я перезагружаю страницу, используя {{ 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 был изменен на 1 с 0, это первый раз, когда я перезагружаю страницу, но во второй раз, страница не может быть открыта,и консоль не может собрать какие-либо данные. Произошла ошибка:

Транзакция этого сеанса была отменена из-за предыдущего исключения во время сброса.Чтобы начать новую транзакцию с этим сеансом, сначала выполните Session.rollback ().Первоначальное исключение: (возникло в результате вызванного запросом автозапуска; рассмотрите возможность использования блока session.no_autoflush, если этот сброс происходит преждевременно) (pymysql.err.InternalError)

Как это исправить

1 Ответ

0 голосов
/ 14 марта 2019

вы пытаетесь перехватить сообщение об ошибке:

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

проверьте, что сообщение об ошибке сначала

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...