2016-04-22 19 views
1

私は匿名ユーザーの投稿提案と司会者が受け取った提案のステータスを指定する非常に簡単なアプリケーションを持っています(ステータスは0,1,2,3です)。フラスコ:レコードは即時に更新されません

私はカスタマイズされたリストビューとモデレータ用フラスコ-Adminを使用しています(私は、各ステータスの4つのボタンが追加されている)

from flask import Flask,request,url_for,redirect 
from Admin.Admin import admin,init_login 
from Model import db,suggestion,User 
import geoip2.webservice 

app = Flask(__name__) 
app.config.from_pyfile('Config.cfg') 
db.init_app(app) 
app.config['SQLALCHEMY_POOL_SIZE'] = 100 
app.config['SQLALCHEMY_POOL_RECYCLE'] = 100 



init_login(app) 
admin.init_app(app) 
IPclient = geoip2.webservice.Client("XXX") 

def UpdateRecord(ID,status): 
      try: 
        Record = suggestion.query.filter_by(id=ID).first() 
        Record.Flag=status 
        db.session.commit() 
      except Exception, r: 
        raise r 
        #db.session.flush() 
        #Record = suggestion.query.filter_by(id=id).first_or_404() 
        #Record.Flag=1 
        #db.session.commit() 


@app.route('/') 
def index(): 

    return redirect("sometime ... ") 



@app.route("/XXXX/Favorite/<int:id>") 
def favorite(id): 
    UpdateRecord(id,1) 
    return redirect(url_for("admin.index")+"Favsuggestion") 



@app.route("/XXXX/Archive/<int:id>") 
def archive(id): 
    UpdateRecord(id,2) 
    return redirect(url_for("admin.index")+"Arcsuggestion") 



@app.route("/WSC/Published/<int:id>") 
def published(id): 
    UpdateRecord(id,3) 
    return redirect(url_for("admin.index")+"Pubsuggestion") 


@app.route("/suggest",methods=["GET","POST"]) 
def suggest(): 
    try: 
     db.session.flush() 
     suggestionString=request.form.get('suggestionString') 
     IpAddress=request.remote_addr 
     IPresponse = IPclient.city(IpAddress) 

     Country=IPresponse.country.name 
     City=IPresponse.city.name 
     if len(suggestionString)>0: 
      suggestRecord = suggestion(suggestionString,Country,City,IpAddress) 
      db.session.add(suggestRecord) 
      db.session.commit() 
    except Exception,e:return str(e) 
    return redirect("http://site/thankyou") 





@app.teardown_appcontext 
def shutdown_session(response_or_exc): 
    try: 
     if response_or_exc is None: 
      db.session.commit() 
    finally: 
     db.session.remove() 
    return response_or_exc 

ここに私の設定です:

# -*- coding: utf-8 -*- 
#NOTE:Replace bands with DB name 
DEBUG = False 
SECRET_KEY='key' 
SQLALCHEMY_DATABASE_URI='mysql://user:[email protected]/sugeestion?charset=utf8' 

問題があることですモデレーターがボタンをクリックしてリロードしてもステータスが数秒後に変更されない場合、提案ステータスが変更されます。

アップデート - 5月2 2016: iは、ログをチェックしていると私は、2つのエラーがDB

OperationalError: (_mysql_exceptions.OperationalError) (2006, 'MySQL server has gone away') [SQL: u'SELECT `User`.id AS `User_id`, `User`.`Username` AS `User_Username`, `User`.`Password` AS `User_Password`, `User`.`Permission` AS `User_Permission` \\nFROM `User` \\nWHERE `User`.id = %s'] [parameters: (1,)], referer: http://TheWebSite 

、よく

StatementError: (sqlalchemy.exc.InvalidRequestError) Can't reconnect until invalid transaction is rolled back [SQL: u'SELECT count(%s) AS count_1 \\nFROM `suggestion` \\nWHERE `suggestion`.`Flag` = %s'] [parameters: [immutabledict({})]], referer: http://TheWebSite 

答えて

0

、データの一貫性のため

に関連する出来事が見つかりました:

私たちはコンサルタントを雇いました。私はカスタマイズされた各admのget_queryの先頭にdb.commit()を追加する必要があることに変わりました私たちはまったく疑わないModelViewクラスに入れました。

私たちはまだそれを修正していませんが、私たちはパラメータを使って遊んでいますが、これまでのところ何もできませんでした。