Flask+MySQL登录应用报错:ProgrammingError与TypeError求助
解决Flask+MySQL登录应用的两个错误
嘿,我来帮你一步步搞定这两个问题!咱们先从最直观的表不存在错误开始,再处理类型错误。
1. 解决_mysql_exceptions.ProgrammingError: Table 'admin.users' doesn't exist
这个错误很明确:你的MySQL数据库admin里没有名为users的表。咱们分两种情况处理:
情况一:手动创建表
直接用MySQL命令行或者可视化工具(比如phpMyAdmin)操作:
- 先确认
admin数据库存在:
SHOW DATABASES;
如果没有,先创建:
CREATE DATABASE admin;
- 进入
admin数据库:
USE admin;
- 创建符合登录需求的
users表,示例SQL(你可以根据自己的需求调整字段):
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL -- 建议存哈希后的密码,不要明文 );
情况二:用SQLAlchemy ORM自动创建表
如果你用了SQLAlchemy的ORM功能,先确保你已经定义了User模型:
from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(50), unique=True, nullable=False) password = db.Column(db.String(255), nullable=False)
然后在应用启动时执行db.create_all()来自动创建表,比如:
if __name__ == '__main__': with app.app_context(): db.create_all() app.run(debug=True)
注意:执行这个之前要确保数据库连接配置正确,否则会连不上数据库。
2. 解决TypeError: an integer is required (got type str)
这个错误通常是配置参数类型不对或者数据处理时类型不匹配,常见场景有两种:
场景一:数据库连接端口是字符串
检查你的Flask数据库配置,如果用的是flask-mysqldb,端口必须是整数,不能是字符串:
# 错误示例:端口用了字符串 app.config['MYSQL_PORT'] = '3306' # 正确做法:改成整数 app.config['MYSQL_PORT'] = 3306
如果用的是SQLAlchemy的连接URI,也要确保端口是数字格式:
# 正确的URI格式 app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://your_username:your_password@localhost:3306/admin'
场景二:表单/查询数据类型转换错误
比如你在登录函数里,把字符串类型的参数当成整数传入了数据库查询,比如根据id查询用户时:
# 错误示例:直接用字符串id查询 user = User.query.get(request.form.get('id')) # 正确做法:转成整数 user = User.query.get(int(request.form.get('id')))
另外,也可以检查表单验证部分(你代码里用到了WTForms),确保字段的类型定义正确,比如数字字段要用IntegerField而不是StringField。
最后小提醒
记得确认所有依赖包都正确安装:
pip install flask flask-mysqldb flask-sqlalchemy wtforms
内容的提问来源于stack exchange,提问作者Mido




