基於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以後,實現不了,我還得學會在前端將數據進行分頁。接口

未完待續..........................

相關文章
相關標籤/搜索