You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Flask+MySQL登录应用报错:ProgrammingError与TypeError求助

解决Flask+MySQL登录应用的两个错误

嘿,我来帮你一步步搞定这两个问题!咱们先从最直观的表不存在错误开始,再处理类型错误。

1. 解决_mysql_exceptions.ProgrammingError: Table 'admin.users' doesn't exist

这个错误很明确:你的MySQL数据库admin里没有名为users的表。咱们分两种情况处理:

情况一:手动创建表

直接用MySQL命令行或者可视化工具(比如phpMyAdmin)操作:

  1. 先确认admin数据库存在:
SHOW DATABASES;

如果没有,先创建:

CREATE DATABASE admin;
  1. 进入admin数据库:
USE admin;
  1. 创建符合登录需求的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

火山引擎 最新活动