2016-04-22 3 views
1

У меня очень простое приложение, в котором анонимное предложение пользователя и модератор определяют статус полученных предложений (Status's are: 0,1,2,3).колба: Записи не обновляются сразу

Я использую Flask-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' 

проблема заключается в том, что при изменении статуса предложения модератора нажатием кнопки перезагрузка страницы, но состояние не изменяется через несколько секунд, я обновляю, тогда будет изменено состояние предложения

Update - 2 мая 2016: я проверил журнал и я нашел 2 ошибки Происходящее связанные с БД

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

хорошо,

для согласованности данных:

Мы наняли консультанта, и я повернулся, чтобы добавить db.commit() в начале get_query в каждом настроенном adm в классе ModelView, который мы вообще не подозревали.

за ошибку мы все еще не исправили ее, мы играем с параметрами, но пока ничего не получилось.

Смежные вопросы