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

我的应用底层数据库用的是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之后,实现不了,我还得学会在前端将数据进行分页。

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

时间: 2024-10-14 19:30:29

基于Flask的Web应用部署到SAE上遇到的问题的相关文章

最简单的nginx教程 - 如何把一个web应用部署到nginx上

最简单的nginx教程 - 如何把一个web应用部署到nginx上 https://www.jianshu.com/p/fb7e58334b6a nginx代理本地文件夹 https://www.jianshu.com/p/52c42d0a052e 利用nginx实现指定路由 https://blog.csdn.net/shuhui018125/article/details/87249080 nginx路由文件配置 https://www.cnblogs.com/omg-two/p/71379

Python 基于Flask的Web开发【1】【用户登录 注册】

实现目标 基于Flask实现用户的登录/注册. 设计思路 前端1.编写登录和注册表单2.编写视图函数3.编写相应的html文件4.页面测试 后台1.创建数据库2.修改配置文件3.编写数据表类并生成数据表4.修改视图函数,实现数据交互 前端实现 1.编写登录和注册表单(/app/home/forms.py) # 导入表单基类 from flask_wtf import FlaskForm # 导入需要用到的表格类型 from wtforms import StringField, Password

基于HT for Web矢量实现HTML5文件上传进度条

在HTML中,在文件上传的过程中,很多情况都是没有任何的提示,这在体验上很不好,用户都不知道到时有没有在上传.上传成功了没有,所以今天给大家介绍的内容是通过HT for Web矢量来实现HTML5文件上传进度条,矢量在<矢量Chart图表嵌入HTML5网络拓扑图的应用>一文中已经讲述了关于setCompType()方法的应用,今天我们用setImage()方法充分利用系统中定义好的矢量资源来实现文件上传进度条,我们先来看下效果图: 从效果图可以看到,向服务器上传了一个mp4文件,并在最下方显示

如何将Java Web项目部署到服务器上

项目部署 我们对于 Java Web 项目在本地机器(无论是 Windows 还是 Linux)上的部署已经了然于心了,那么对于在云服务器上部署 Java Web 项目又是如何操作的呢? 其实很简单,还是离不开 Web 项目部署的那三点:① 基础的 JDK 环境② 一个 Web 服务器.如 Tomcat.JBoss③ 一款数据库.如:mysql 对于云服务器上 Java Web 项目的部署,和平时在 Windows.Linux 下部署是一样的.最多也就是只能使用纯命令模式来操作而已,其实过程都一

基于flask开发web微信

流程 阶段一 目标:基于falsk编写登录页面,获取二维码 解析:1:.二维码图片地址有个后缀字符串 2.图片生成之前,先获取到随机字符串再生成二维码 3.二维码的图片的来源 4.时间戳 from flask import Flask,request,render_template import time # 获取时间戳 import requests import re app = Flask(__name__) # app.run(debug=True) or app.debug = Tru

基于Flask 实现Web微信登陆

网页版微信登陆网址 https://login.wx.qq.com/ 获取微信登陆的二维码 在浏览器中访问登陆接口 https://login.wx.qq.com/ 我们查找二维码的图片可以看到 其中src为 https://login.weixin.qq.com/qrcode/Yd5dz5xUnw==" 而我们每次刷新都会生成一个新的二维码 多刷新几次我们会发现二维码中src最后面的qrcode/......值每次都会改变 ,索引肯定会有一些请求可以获取这些值 我们继续追踪发现下面的地址会返回

把web项目部署到tomocat上

版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 常识 1 War包 2 Tomcat服务器 配置Java运行环境 1 下载并安装JDK 2 设置JDK环境变量 3 验证是否JDK环境变量设置成功 部署Tomcat服务器 1 下载Tomcat到本地硬盘 2 设置Tomcat环境变量 3 验证Tomcat环境变量的配置是否成功 部署Web项目的War包到Tomcat服务器 1 FTP获取war包和sql脚本 2 配置Web项目的虚拟目录 3 访问web项目的登录页 参考来源:

【selenium】Selenium基于Python3的Web自动化测试脚本在IE上运行慢的解决方法

阐述问题: 执行自动化脚本时,发现文本输入在IE浏览器上特别慢,这样大大降低了自动化效率 解决办法:原因是原先下载的IEDriverServer.exe为64位系统的IE,换为32位的IEDriverServer.exe就可以了,下载地址为:IEDriverServer_Win32_2.52.0.zip

Python Flask 在Sina App Engine (SAE)上安家

早就听说了Python的大名,随着的编程语言的理解加深,越发觉得动态语言的威力--真大呀. 趁这段时间不忙,我也用Python写了一个应用,并且将其部署到Sina App Engine (SAE).SAE确实是一个好地方,它支持Python,对于开发者,其使用费用几乎为0. 更重要的是,如果我的这个app不会半路夭折,等它长大后,这个平台也能给予足够的支持. 虽然,整个过程都很简单,但是对于一个新手,特别是从传统C#, Asp.net, IIS阵营过来的开发人员来说,什么都是第一次接触.希望我的