首页 > 解决方案 > flask db migrate 不更改列设置

问题描述

我正在使用带有烧瓶迁移的 sql-alchemy。我用这样的东西设置了我的数据库类:

class Candidate(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32), index=False, unique=False)
    interviewer = db.Column(db.String(32), index=False, unique=False)

不幸的是,有些值太长了,所以我得到了错误:

sqlalchemy.exc.DataError:(psycopg2.errors.StringDataRightTruncation)值对于类型字符变化(32)而言太长

不确定问题出在哪一列(实际课程要复杂得多),我像这样更改了课程:

class Candidate(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), index=False, unique=False)
    interviewer = db.Column(db.String(64), index=False, unique=False)

然后跑:

flask db migrate
flask db upgrade

应用更改。不幸的是,我仍然收到同样的错误。我究竟做错了什么?

标签: pythonflasksqlalchemyflask-migrate

解决方案


Alembic(Flask-Migrate 背后的迁移引擎)默认情况下不会将数据类型更改放入迁移中,因此您从 32 到 64 的更改可能会被忽略。您可以通过查看生成的迁移脚本来确认。

要配置 Alembic 以监视列类型更改,您必须在compare_type=True创建Migrate类时添加选项:

migrate = Migrate(app, db, compare_type=True)

完成此操作后,重新生成迁移,它应该具有使列更大的代码。


推荐阅读