2015-06-10 110 views
0

我想用代碼來更新我的數據庫剪斷提供如下:如何避免燒瓶插入重複條目?

@app.route('/update') 
def update(): 
    os.system('python update.py') 
    return redirect(url_for('home')) 

但是當我使用gunicorn -w 4運行應用程序,並單擊鏈接http://127.0.0.1:5000/update一次,它將運行python update.py兩次。同樣的內容被插入數據庫兩次。我認爲它可能是gunicorn的多重處理導致的問題。

我也想讓這個列獨一無二,但它不適合我的需要。

我該如何解決問題? 你能告訴我一些很好的解決方案來每天自動更新數據庫嗎?

+0

什麼是writedatabase?你是否多次撥打同一個網址?這是您的原始縮進嗎? – wonderb0lt

+0

如果在循環中確實有導入語句,則表示每次只導入一次writedatabase而不是一次?不應該在循環之外?然後在循環中使用'h'。 – Craicerjack

+1

爲此您必須有一個獨特的列,以便數據庫將出現重複錯誤 –

回答

0

您只能更改系統的狀態,例如對數據庫進行任何更改,請求POST。所以:

@app.route('/update', methods=['POST']) 
def update(): 
    os.system('python update.py') 
    return redirect(url_for('home')) 

否則你就有可能在多個場合雙跑,像瀏覽器的預加載,重新啓動瀏覽器,瀏覽器標籤和許多其他的unclosing。我可以用from . import update而不是os.system

+0

謝謝!您的答案解決了我的問題!但我使用此代碼來避免它,它不工作時,我單擊/更新發布按鈕兩次。 '''@ app.route('/ update',methods = ['POST'])def update():if'updated'in session:return'you have updated'session ['updated'] = True os.system ('python update.py')返回重定向(url_for('home'))''' – Jack