我在编码时遇到了一些问题。我必须用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')下面是applicativo.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 questionquestion.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页面只是一个静态页面。
谢谢你的帮助!!
发布于 2016-01-08 08:16:02
我有预感你在用MySQL。
默认情况下,MySQL使用隔离级别 Repeatable Read。
可重复读取本质上是指任何读取的数据都不能更改,如果事务再次读取相同的数据,它将发现之前读取的数据原封不动。
你想要的是READ COMMITTED
这本质上限制了读者看到任何中间的、未提交的、“脏”的数据。它总是读取当前的提交,并且不保证一致性。
还有其他的,如READ UNCOMMITTED和SERIALIZABLE
将隔离级别参数传递给会话构造函数。
对于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的更多信息,请参阅(引擎级、连接级、事务级)
https://stackoverflow.com/questions/34639383
复制相似问题