You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask连接MySQL触发AssertionError问题求助

问题原因与解决方法

错误根源

你当前的代码在每次请求进来时(路由函数mysqlselect内部)才初始化MySQL(app),而Flask-MySQL的初始化逻辑会尝试给Flask应用注册teardown_request钩子函数。但此时应用已经启动并处理了第一个请求,Flask不允许在请求处理阶段再修改应用的设置钩子,因此抛出AssertionError。

修复方案

把MySQL实例的初始化移到路由定义之前、应用配置完成之后,确保在app.run()执行前完成所有应用扩展的初始化:

import os
from flask import Flask
from flaskext.mysql import MySQL

app=Flask(__name__)
# 数据库配置
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
app.config['MYSQL_DATABASE_USER'] = 'mydbuser'
app.config['MYSQL_DATABASE_PASSWORD'] = 'mypassword'
app.config['MYSQL_DATABASE_DB'] = 'mydatabasename'

# 全局初始化MySQL实例,放在路由之前
mysql = MySQL(app)

@app.route('/mysqltest')
def mysqlselect():
    cnx = mysql.connect()  # 直接使用全局的mysql实例连接
    cursor=cnx.cursor()
    cursor.execute(''' select tk_date from token ''')
    data=cursor.fetchall()
    print(data)
    cursor.close()
    cnx.close()  # 建议同时关闭数据库连接
    return "test"

if __name__=='__main__':
    app.run(debug=True)

额外说明

  • 不要在请求处理函数内重复初始化扩展实例,这类操作必须在应用启动前完成,确保所有钩子和配置都被正确注册。
  • 用完数据库连接后记得调用cnx.close()释放资源,避免连接泄漏。

内容的提问来源于stack exchange,提问作者Slim KETARI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 08:36:33