码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2015-11-23 16:23:22      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

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

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

查了官方文档和Google了很多,首先是用如下方法去做的:

1、SQLAlchemy_POOL_SIZE = 10

2、每次操作之后关闭数据库

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()

但是上面的步骤对我却不起作用,真的是不应该啊!!!!!

后来又查了一下,说可以用ping,所以我此时就抛弃了利用SQLALchemy操作该部分数据,而改为直接使用MySQLdb。利用ping的方法就是不断的进行新连接。

 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)

在进行插入时:

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的问题。

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

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

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

标签:

原文地址:http://www.cnblogs.com/hai-persist/p/4988667.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!