個人應用底層數據庫用的是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以後,實現不了,我還得學會在前端將數據進行分頁。接口
未完待續..........................