Docker环境下Flask连接MySQL报视图函数无返回值错误如何解决?
问题根因
报错和Docker容器间的MySQL连接本身无关,你的容器互联配置正确,Python已经可以正常访问MySQL,问题出在Flask视图函数的返回逻辑不符合框架要求:
print()函数执行后只会返回None,你写的return print(...)相当于直接给Flask返回了无效的None值- 如果你查询的
test_table表为空,for循环不会执行,整个函数没有任何返回逻辑,也会触发同样的报错
修复方案
调整视图函数的返回逻辑,直接返回字符串类型的查询结果,同时补充无数据时的兜底返回,建议额外增加数据库连接释放、异常捕获逻辑避免资源泄漏,修正后的代码如下:
from flask import Flask app = Flask(__name__) import mysql.connector from mysql.connector import Error @app.route('/db') def python(): connection = None try: connection = mysql.connector.connect(host="mysql", user="root", password="root", database="test") with connection.cursor() as cursor: cursor.execute("Select * from test_table") res_list = [] for(userId , firstName , lastName ) in cursor: res_list.append("{}, {}, {}".format(userId, firstName, lastName)) # 有数据返回拼接后的查询结果,无数据返回兜底提示 return "<br>".join(res_list) if res_list else "未查询到匹配数据" except Error as e: return f"数据库操作异常:{str(e)}" finally: # 主动关闭连接避免资源泄漏 if connection and connection.is_connected(): connection.close()
潜在配置补充
如果修改后出现数据库连接报错,可以检查docker-compose的MySQL配置,你当前的配置缺少MySQL初始化必填的环境变量,可能导致root密码初始化失败:
mysql: image: 'mysql:latest' restart: always # 补充以下环境变量配置 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: test volumes: - './my-vol/mysql_data:/var/lib/mysql' ports: - '3306:3306'
加完配置后重建容器即可自动初始化root密码和test库。
内容的提问来源于stack exchange,提问作者Alejandro Sánchez
相关产品推荐
相关产品推荐

