基于Flask的Web应用部署到SAE上遇到的问题

个人应用底层数据库用的是MySQL,利用Flask-SQLALchemy实现接口操做。我遇到的问题是:前端

在我把代码部署到SAE上后,当数据向数据库insert的时候老是出现“2006,MySQL has gone away”的问题。python

查了官方文档和Google了不少,首先是用以下方法去作的:sql

一、SQLAlchemy_POOL_SIZE = 10数据库

二、每次操做以后关闭数据库session

def init_after_handlers(app):
    @app.teardown_appcontext
    def teardown_request(exception=None):
        if hasattr(g, 'db'):
            g.db.close()
        #db2 = getattr(g, 'db2', None)
        if db is not None:
            db.session.remove()

可是上面的步骤对我却不起做用,真的是不该该啊!!!!!app

后来又查了一下,说能够用ping,因此我此时就抛弃了利用SQLALchemy操做该部分数据,而改成直接使用MySQLdb。利用ping的方法就是不断的进行新链接。spa

 def _connect(self,dbname):
        tar = self.config[dbname]
        self.con = MySQLdb.connect(host=tar['host'],
                                   user=tar['user'],
                                   port=tar['port'],
                                   passwd=tar['passwd'],
                                   charset=tar['charset'],
                                   db=tar['db'])
        self.con.ping(True)
        self.cursor = self.con.cursor(cursorclass=MySQLdb.cursors.DictCursor)

在进行插入时:code

def insert_by_dic(self,table,data):
        keys = data.keys()
        values = []
        keystr = ','.join('`' + x + '`' for x in keys)
        for key in keys:
            values.append(data[key])
        valstr = ','.join( "'" + x + "'" if isinstance(x,unicode) \
                           else "'" + str(x).decode('utf8') +"'" for x in values )   
        sql = "INSERT INTO  %s (%s) VALUES (%s) " % (table,keystr,valstr)
        self.cursor.execute(sql)
        self.con.commit()
 

 

 def insert_list_dic(self,data,table):
        for item in data:
            try:
                self.insert_by_dic(table, item)
            except MySQLdb.OperationalError:
                self._connect(dbname)
                self.insert_by_dic(table, item)
                continue
            except MySQLdb.IntegrityError,e:
                print str(e)
                continue

  

进行如上代码后,已经彻底解决了2006的问题。blog

其实如今又遇到了一个问题,那就是我以前的分页是在后台实现的,即在model中利用pagnite实现的,但利用MySQLdb以后,实现不了,我还得学会在前端将数据进行分页。接口

未完待续..........................

相关文章
相关标签/搜索