flask db upgrade问题:(pymysql.err.OperationalError) (1050, “Table ‘emailcaptcha‘ already exists“)解决办法

文章讲述了exts.py文件的作用以及在Flask应用中使用ORM映射数据库时遇到的命名冲突问题,介绍了`flaskdbupgrade`命令的使用和错误处理,特别是如何确保`__tablename__`以小写命名以避免表名冲突。

exts.py文件

# exts.py这个 文件存在的意义是为了解决循环引用的问题

# flask-sqlalchemy
from flask_sqlalchemy import SQLAlchemy
from flask_mail import Mail
db = SQLAlchemy()
mail = Mail()

models.py文件

from exts import db
from datetime import datetime


# ORM模型映射成表的三步
# 1.flask db init:这步只需要执行一次
# flask db stamp head是使用Flask-Migrate和Alembic进行数据库迁移时的一个命令。
# 2.flask db migrate:识别ORM模型的改变,生产迁移脚本在migrations/versions目录下
# 3.flask db upgrade:运行迁移脚本,会多创建一个alembic_version的一个表来记录迁移脚本的版本号


class UserModel(db.Model):
    __tablename__ = "user"  # 表名为user,命名的时候最好为全部小写,否则在模型映射的时候会无法更新数据库
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(100), nullable=False)
    password = db.Column(db.String(100), nullable=False)
    email = db.Column(db.String(100), nullable=False, unique=True)
    join_time = db.Column(db.DateTime, default=datetime.now)


class EmailCaptchaModel(db.Model):
    __tablename__ = "emailcaptcha"  # 表名为emailcaptcha,解决办法:https://blog.csdn.net/joker_zsl/article/details/116050407?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-116050407-blog-105825964.235^v38^pc_relevant_default_base&spm=1001.2101.3001.4242.1&utm_relevant_index=3
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    email = db.Column(db.String(100), nullable=False)
    captcha = db.Column(db.String(100), nullable=False)
    used = db.Column(db.Boolean,default=False)

就是当我想在EmailCaptchaModel中添加了一个新的表used

命令行执行flask db upgrade时报错

sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1050, "Table 'emailcaptcha' already exists")

最后发现是

__tablename__ = "emailcaptcha"  # 表名为emailcaptcha

这一行命名的时候最好为全部小写,否则在模型映射的时候会无法更新数据库

原先为

__tablename__ = "EmailCaptcha"  # 表名为emailcaptcha

我也是找的别人的解决办法链接在这里:

flask踩坑记录:flask_migrate迁移数据库出现 1050 “Table ‘xxxx‘ already exists“_joker_zsl的博客-CSDN博客

 希望以上会帮到遇到类似问题的你

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值