【问题标题】:flask: Records are not updated immeditelyflask:记录不会立即更新
【发布时间】:2016-08-16 09:12:01
【问题描述】:

我有一个非常简单的应用程序,其中匿名用户发布建议和版主指定收到建议的状态(状态为: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:pass@localhost/sugeestion?charset=utf8'

问题是当版主通过单击按钮更改建议状态时,页面重新加载但状态在几秒钟后没有改变我刷新然后建议状态将改变

更新 - 2016 年 5 月 2 日: 我检查了日志,发现发生了 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

【问题讨论】:

    标签: python mysql flask flask-sqlalchemy flask-admin


    【解决方案1】:

    嗯,

    为了数据一致性:

    我们聘请了顾问,我转而认为我们需要在每个自定义的管理 ModelView 类的 get_query 开头添加 db.commit() 。

    对于我们仍未修复的错误,我们正在使用参数,但到目前为止没有任何效果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-08
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 2016-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多