2016-01-06 91 views
0

我在編碼時遇到了一些問題。我必須在Python論壇中添加一個問題。在數據庫中添加新對象後,代碼僅打印舊對象,而不打印新對象,即使在數據庫中添加了對象。 只有當我再次運行時纔會打印新對象。查詢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 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頁只是一個靜態頁面。

感謝您的幫助!

+0

你應該不會被傳遞所有的對render_template()方法的問題? –

+0

你使用的是什麼rdbms? – Busturdust

回答

0

我有一個預感你正在使用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:[email protected]/example", isolation_level='READ COMMITTED')

更多的隔離級別和SQLAlchemy的,(發動機水平,連接級,事務級)

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