flask清空mysql_Flask-MySQL执行一次sql操作后断开了连接

在使用 Flask 和 Flask-MySQL 库的 web 服务中,首次请求能够正常返回数据,但后续请求导致错误 `Already closed`。问题出现在 MySQL 数据库连接在第一次请求后被关闭,导致第二次请求时无法使用。解决方案可能涉及调整数据库连接池配置或在每次请求时重新建立连接。
摘要由CSDN通过智能技术生成

#!/env/python

#coding: utf-8

import socketio

import eventlet

from flask import Flask, jsonify, render_template

from flaskext.mysql import MySQL

import pymysql

sio = socketio.Server(async_mode = 'eventlet')

app = Flask(__name__)

app.wsgi_app = socketio.Middleware(sio, app.wsgi_app)

app.config['SECRET_KEY'] = 'secret!'

app.config['JSON_SORT_KEYS'] = False

dbConfig = {

'MYSQL_DATABASE_HOST': '127.0.0.1',

'MYSQL_DATABASE_DB': 'test',

'MYSQL_DATABASE_USER': 'root',

'MYSQL_DATABASE_PASSWORD': 'root1234'

}

for key,val in dbConfig.items():

app.config[key] = val

@app.route("/")

def hello():

mysql = MySQL( cursorclass = pymysql.cursors.DictCursor )

mysql.init_app(app)

cursor = self.__mysql.get_db().cursor()

cursor.execute('select id uid,cellphone,nickname,sex,age from tb_user limit 3')

data = cursor.fetchall()

return jsonify({'code': 200, 'message': '', 'data': data})

class MyCustomNamespace(socketio.Namespace):

def on_connect(self, sid, environ):

print('New client connected - {sid} '.format(sid = sid))

sio.emit('reply', {'data': 'Connected', 'count': 0},

room = sid)

def on_disconnect(self, sid):

print('Client disconnected [ {sid} ]'.format(sid = sid))

def on_my_event(self, sid, data):

self.emit('my_response', data)

def on_disconnectRequest(self, sid):

sio.disconnect(sid)

sio.register_namespace(MyCustomNamespace('/test'))

if __name__ == '__main__':

eventlet.wsgi.server(eventlet.listen(('', 5000)), app)

然后启动server,第一次请求首页时可以返回数据,但是再次请求首页时就会报错:

Traceback (most recent call last):

File "D:\Tools\Python363\lib\site-packages\eventlet\wsgi.py", line 539, in handle_one_response

result = self.application(self.environ, start_response)

File "D:\Tools\Python363\lib\site-packages\flask\app.py", line 1997, in __call__

return self.wsgi_app(environ, start_response)

File "D:\Tools\Python363\lib\site-packages\engineio\middleware.py", line 49, in __call__

return self.wsgi_app(environ, start_response)

File "D:\Tools\Python363\lib\site-packages\flask\app.py", line 1993, in wsgi_app

ctx.auto_pop(error)

File "D:\Tools\Python363\lib\site-packages\flask\ctx.py", line 387, in auto_pop

self.pop(exc)

File "D:\Tools\Python363\lib\site-packages\flask\ctx.py", line 353, in pop

self.app.do_teardown_request(exc)

File "D:\Tools\Python363\lib\site-packages\flask\app.py", line 1879, in do_teardown_request

func(exc)

File "D:\Tools\Python363\lib\site-packages\flaskext\mysql.py", line 58, in teardown_request

ctx.mysql_db.close()

File "D:\Tools\Python363\lib\site-packages\pymysql\connections.py", line 728, in close

raise err.Error("Already closed")

pymysql.err.Error: Already closed

请教大佬们,这种情况是因为什么,然后我应该怎么处理它呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值