皮尔:自我_sock.settimeout设置超时(self.\u write\u timeout)在flas中

2024-09-30 08:19:18 发布

您现在位置:Python中文网/ 问答频道 /正文

当我在flask中使用pymysql时,当ctrl + f5刷新我的网页时,我经常会出错。谁能给我一些建议?求你了

这是我的代码:
我定义了处理数据库连接的乐趣

你知道吗双倍

db_host = current_app.config['DB_HOST']
db_port = int(current_app.config['DB_PORT'])
db_name = current_app.config['DB_NAME']
db_passwd = current_app.config['DB_PASSWD']
db_user = current_app.config['DB_USER']

connection = pymysql.connect(host=db_host,
                             db=db_name,
                             port=db_port,
                             user=db_user,
                             passwd=db_passwd,
                             cursorclass=pymysql.cursors.DictCursor,
                             )
def get_db():
    if 'db' not in g:
        g.db = connection
        g.db.ping()
    return g.db


@app.teardown_appcontext
def close_db(e=None):
    db = g.pop('db', None)
    if db is not None:
        db.close()

### when I lgoin , I will call get_db(), but there get some error
### auth.py
@bp.before_app_request
def load_logged_in_user():
    user_id = session.get('user_id')


    if user_id is None:
        g.user = None
    else:
        db = get_db()
        db_cursor = db.cursor()
        db_cursor.execute('SELECT * FROM users WHERE id = %s', [user_id,])
        user_info = db_cursor.fetchone()
        g.user  = user_info.get("username")
        g.is_super_admin  = user_info.get("is_superadmin")

        role_id = user_info.get("role_id")
        db_cursor = db.cursor()
        db_cursor.execute('SELECT * FROM roles WHERE id = %s', [role_id,])
        role_info = db_cursor.fetchone()
        role = role_info.get("roles")
        if role == 'ck_admin':
            g.is_ck_admin = 1
        else:
            g.is_ck_admin = 0

错误:

大多数时间都是工作,当我用ctrl+f5或ctrl+R连续刷新网页时,我会出错

Traceback (most recent call last):
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\flask\app.py", line 2309, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\flask\app.py", line 2295, in wsgi_app
    response = self.handle_exception(e)
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\flask\app.py", line 1741, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\flask\_compat.py", line 35, in reraise
    raise value
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\flask\app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\flask\app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\flask\app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\flask\_compat.py", line 35, in reraise
    raise value
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\flask\app.py", line 1811, in full_dispatch_request
    rv = self.preprocess_request()
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\flask\app.py", line 2087, in preprocess_request
    rv = func()
  File "D:\ck_web\ck_web\auth\auth.py", line 58, in load_logged_in_user
    db = get_db()
  File "D:\ck_web\ck_web\utils\db.py", line 27, in get_db
    g.db.ping()
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\pymysql\connections.py", line 544, in ping
    self.connect()
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\pymysql\connections.py", line 601, in connect
    self._get_server_information()
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\pymysql\connections.py", line 980, in _get_server_information
    packet = self._read_packet()
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\pymysql\connections.py", line 671, in _read_packet
    "Lost connection to MySQL server during query")
pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')
Traceback (most recent call last):
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\flask\app.py", line 2309, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\flask\app.py", line 2295, in wsgi_app
    response = self.handle_exception(e)
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\flask\app.py", line 1741, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\flask\_compat.py", line 35, in reraise
    raise value
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\flask\app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\flask\app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\flask\app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\flask\_compat.py", line 35, in reraise
    raise value
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\flask\app.py", line 1811, in full_dispatch_request
    rv = self.preprocess_request()
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\flask\app.py", line 2087, in preprocess_request
    rv = func()
  File "D:\ck_web\ck_web\auth\auth.py", line 58, in load_logged_in_user
    db = get_db()
  File "D:\ck_web\ck_web\utils\db.py", line 27, in get_db
    g.db.ping()
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\pymysql\connections.py", line 544, in ping
    self.connect()
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\pymysql\connections.py", line 602, in connect
    self._request_authentication()
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\pymysql\connections.py", line 865, in _request_authentication
    self.write_packet(data)
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\pymysql\connections.py", line 648, in write_packet
    self._write_bytes(data)
  File "C:\Users\Meng\.virtualenvs\ck_web-Qdl7sgJU\lib\site-packages\pymysql\connections.py", line 714, in _write_bytes
    self._sock.settimeout(self._write_timeout)
AttributeError: 'NoneType' object has no attribute 'settimeout'

我的服务器有很多时间等待连接:

 netstat -tnp tcp |findstr "3306"
  TCP    172.16.8.81:60946      47.90..8:3306       TIME_WAIT       InHost
  TCP    172.16.8.81:60948      47.90..8:3306       TIME_WAIT       InHost
  TCP    172.16.8.81:60949      47.90..8:3306       TIME_WAIT       InHost
  TCP    172.16.8.81:60951      47.90..8:3306       TIME_WAIT       InHost
  TCP    172.16.8.81:60956      47.90..8:3306       TIME_WAIT       InHost
  TCP    172.16.8.81:60957      47.90..8:3306       TIME_WAIT       InHost
  TCP    172.16.8.81:60959      47.90..8:3306       TIME_WAIT       InHost
  TCP    172.16.8.81:60961      47.90..8:3306       TIME_WAIT       InHost
  TCP    172.16.8.81:60964      47.90..8:3306       TIME_WAIT       InHost
  TCP    172.16.8.81:60965      47.90..8:3306       TIME_WAIT       InHost
  TCP    172.16.8.81:60967      47.90..8:3306       TIME_WAIT       InHost

我不知道我能做什么,所以你能给我一些建议吗?拜托。你知道吗


Tags: inpywebappdblibpackagesline

热门问题