我在编码方面遇到了一些问题。我在Python的论坛中添加了一个问题。在db中添加新对象后,代码只打印旧对象,而不是新对象,即使在db中添加了对象。 只有在我再次运行时才会打印新对象。
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
这是applicativo.py:
<form method="POST" enctype="multipart/form-data" action={{ url_for('newquestion', topic_id=topic_id) }}>
<p>
{{ wtf.quick_form(form) }}
</p>
</form>
question.html:
attrs
newquestion.html页面只是一个静态页面。
感谢您的帮助!!
答案 0 :(得分:0)
我有预感你正在使用MySQL。
默认情况下,MySQL使用Repeatable Read
的隔离级别。
可重复读取本质上意味着任何数据读取都不会改变,如果事务再次读取相同的数据,它将找到原先读取的数据,保持不变。
你想要的是READ COMMITTED
这实质上限制了读者看到任何中间的,未提交的,“肮脏的”&#39;数据。它总是读取当前提交,并且不保证一致性。
还有其他内容,例如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的更多信息,(引擎级别,连接级别,事务级别)