【问题标题】:Update page after query python flask查询python烧瓶后更新页面
【发布时间】:2016-01-06 17:44:31
【问题描述】:

我在编码时遇到了一些问题。我必须在 Python 的论坛中添加一个问题。在数据库中添加新对象后,代码只打印旧对象,没有新对象,即使在数据库中添加了对象。 仅当我再次运行时才会打印新对象。

@app.route('/question/<topic_id>', methods=['GET', 'POST'])
def newquestion(topic_id):
    username = 'elena27'  
    question_ = request.form['question']
    new_question = applicativo.newQuestion(username, question_, topic_id)
    db.session.add(new_question)
    db.session.commit()
    db.session.remove()
    return render_template('newquestion.html')

这里是applicivo.py:

def countQuestion():
    number=int(session.query(Question).order_by('-id').first().id)
    return number+1

def newQuestion(username, question, topic):
    id = countQuestion()
    date = datetime.now()
    question = Question(id, topic, username, question, date)
    return question

question.html:

<form method="POST" enctype="multipart/form-data" action={{ url_for('newquestion', topic_id=topic_id) }}>
    <p>
        {{ wtf.quick_form(form) }}
    </p>
</form>

newquestion.html 页面只是一个静态页面。

感谢您的帮助!!

【问题讨论】:

  • 您不应该将所有问题传递给render_template() 方法吗?
  • 你用的是什么 rdbms?

标签: python flask sqlalchemy flask-sqlalchemy flask-wtforms


【解决方案1】:

我预感你正在使用 MySQL。

默认情况下,MySQL 使用Repeatable Read隔离级别

可重复读本质上是指任何读取的数据都不能改变,如果事务再次读取相同的数据,它会发现之前读取的数据在原地,不变。

你想要的是READ COMMITTED

这实质上限制了读者看到任何中间的、未提交的、“脏”数据。它总是读取当前的提交,并且不承诺一致性。

还有READ UNCOMMITTEDSERIALIZABLE等其他

隔离级别参数传递给会话构造函数..

对于Flask-SQLAlchemy我相信

db = SQLAlchemy(session_options={"isolation_level":"READ COMMITED"})

应该可以,但我不使用FLask-SQLAlchemy

对于原始的SQLAlchemy 引擎

eng = create_engine( "mysql+pymysql://admin:password@localhost/example", isolation_level='READ COMMITTED')

有关隔离级别和 SQLAlchemy 的更多信息,(引擎级别、连接级别、事务级别)

http://docs.sqlalchemy.org/en/latest/orm/session_transaction.html#setting-transaction-isolation-levels

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多